Active Record Question

Hi-

Say I am returning some collection of DateTime items and I only want
to compare the month. Is there a way to do this directly in the find?

Something like this…
@coll = Collection.find(:all, :conditions => [“date.month
= ?”,Time.now.lat_month])

Thanks!

Perfect, thanks!

Say I am returning some collection of DateTime items and I only want
to compare the month. Is there a way to do this directly in the find?

Something like this…
@coll = Collection.find(:all, :conditions => [“date.month
= ?”,Time.now.lat_month])

Well, if it’s mysql you could do this:

:conditions => [“MONTH(date.month) = MONTH(?)”, Time.now.last_month]

Note this will pull up every date with february as the month
regardless
of the year, not just feb 08.

May lose some database independence, but it will work. Just looks up
the
method for your particular database.

You could also change it to look for a date BETWEEN this AND that which
all Db’s support.

-philip

I like the range, so for simplicity, I did this:

beginLastMonth = Time.now.last_month.beginning_of_month
endLastMonth = Time.now.last_month.at_end_of_month

@col = Collection.find(:all, :conditions => [“start_time >= ? and
start_time <= ?”,beginLastMonth,endLastMonth])

Just for my own style I’d have done:
beginLastMonth = Time.now.last_month.beginning_of_month
endLastMonth = beginLastMonth.at_end_of_month

Not only does it avoid figuring out last_month a second time, but in
that tiny fraction of a second between the two lines the month could
change and then you have a two month range.

-Rob

Rob B. http://agileconsultingllc.com
[email protected]