我正在尝试构建一个查询,该查询将根据列'last_login_at'搜索最近的条目。这是一个带时区的日期时间字段(即Time.zone.now
)
当我执行
User.find(:all, :conditions => ["last_login_at < ?", 24.hours.ago])
我一无所获。
或者我可以将今天定义为Time.zone.today
,将昨天定义为Time.zone.today - 1.day
并运行
User.find(:all, :conditions => ["last_login_at between ? and ?", today, yesterday])
它仍然返回0结果。我知道有些条目属于这一类。
答案 0 :(得分:19)
老问题,但这是更新的语法:
User.where(last_login_at: 3.days.ago..DateTime.now)
答案 1 :(得分:11)
确保您在数据库中记录的时区和您的rails应用程序输出的时区是相同的。这有时会导致问题。否则尝试这个命名范围:
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
允许你这样做:
User.last_loggedin_before 24.hours.ago
或
User.last_loggedin_within 24.hours.ago