Hi, Id like to do something like that:
@payment_history = PaymentHistory.where(“company_id = #{@company.id } AND created_at <= #{Time.now} AND create_at >= #{Time.now - 1.month}”).first
problem is it doesn’t seen to let me compare the create_at attribute with Time.now.
Anyone knows the proper way to do this?
Thank you,
Rodrigo
11155
(-- --)
July 24, 2011, 6:19am
2
puts Time.now.inspect
puts Time.now.inspect.class
--output:--
2011-07-23 23:18:03 -0700
String
Need quotes:
created_at <= "#{Time.now}" AND created_at >= "#{Time.now-1.month}"
but you can to do that way
.where(:company_id => @company.id ).where(:created_at => Time.now…Time.now-1.month)
I think you can do this way, too:
1.month.ago
Con
(Con)
July 24, 2011, 1:05pm
5
Hi, Id like to do something like that:
@payment_history = PaymentHistory.where(“company_id = #{@company.id } AND created_at <= #{Time.now} AND create_at >= #{Time.now - 1.month}”).first
Rodrigo, you might be able to do something like this:
time_range = (Time.now - 1.month)…(Time.now)
@payment_history = PaymentHistory.where( :company_id => @company.id ).where( :created_at => time_range ).first
Good luck,
-Conrad
hassan
(Hassan Schroeder)
July 24, 2011, 2:56pm
6
@payment_history = PaymentHistory.where("company_id = #{@company.id } AND
created_at <= #{Time.now} AND create_at >= #{Time.now - 1.month}").first
problem is it doesn't seen to let me compare the create_at attribute with
Time.now.
"create_at" or created_at ?
Anyone knows the proper way to do this?
Showing the actual error message would help provide better answers.
use array, so try
time = Time.now
story = PaymentHistory.where(["company_id = ? AND created_at <= ? AND create_at >= ?", company.id, time, time - 1.month ).try(:first)
NEVER use direct inserting of values into SQL query
and "first" could end with "nil.first", so use try()
tom
sorry, missed one ]
story = PaymentHistory.where(["company_id = ? AND created_at <= ? AND create_at >= ?", company.id, time, time - 1.month]).try(:first)
Can i use … as in 0…10 with Time ??
Thank you very much guys, it worked
Which suggestion worked? Just so that someone who finds this thread
can learn from it and not have to ask all over again.
Colin
Con
(Con)
July 25, 2011, 1:11am
12
Hi, Id like to do something like that:
@payment_history = PaymentHistory.where(“company_id = #{@company.id } AND created_at <= #{Time.now} AND create_at >= #{Time.now - 1.month}”).first
Rodrigo, you might be able to do something like this:
time_range = (Time.now - 1.month)…(Time.now)
@payment_history = PaymentHistory.where( :company_id => @company.id ).where( :created_at => time_range ).first
If the following is the case:
class Company
has_many :payment_histories
def first_paymeny
end
class PaymentHistory
belongs_to :company
end
Then you should write something like the following:
paymant_histories =
unless @company.nil ?
time_range = (Time.now - 1.month)…(Time.now)
paymant_histories = @company.payment_histories.where ( :created_at => time_range )
end
@payment_history = paymant_histories.first
In the above, we scoped the PaymentHistory from the context of the Company instance
and this makes our intentions clear. Next, payment_histories will always return an array.
Thus, you’ll have no worries of invoking the first method on it and it will not require using
the try method.
Good luck,
-Conrad