Help with queries

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

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

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

@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

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

:created_at => time_range

That part worked =)