views:

350

answers:

1

I'm trying to build a query that will search for recent entries based on column 'last_login_at'. This is a datetime field with time zone (i.e. Time.zone.now) When I execute

User.find(:all, :conditions => ["last_login_at < ?", 24.hours.ago])

I get nothing.

Alternatively I can define today as Time.zone.today and yesterday as Time.zone.today - 1.day and run

User.find(:all, :conditions => ["last_login_at between ? and ?", today, yesterday])

and it still returns 0 results. I know there are some entries that fall into this category.

+2  A: 

Ensure that the timezones you have recorded within the database and those your rails app is outputting are equal. This can sometimes cause an issue. Otherwise try this named scope:

 class User < ActiveRecord::Base
   named_scope :last_loggedin_before, lambda { |time_ago| { :conditions => ['last_login_at   < ?', time_ago] } }
   named_scope :last_loggedin_within, lambda { |time_ago| { :conditions => ['last_login_at   > ?', time_ago] } }
 end

allowing you to do:

 User.last_loggedin_before 24.hours.ago

or

 User.last_loggedin_within 24.hours.ago
roja
It seems that the timezones im comparing are both PST -08:00, so im still stuck there ... The named scopes should work great! thanks
Mike