Ruby on rails RubyonRails按日期时间范围查询(最近24小时、48小时等)
我正试图构建一个查询,根据“last_login_at”列搜索最近的条目。这是一个带有时区的日期时间字段(即Ruby on rails RubyonRails按日期时间范围查询(最近24小时、48小时等),ruby-on-rails,datetime,range,Ruby On Rails,Datetime,Range,我正试图构建一个查询,根据“last_login_at”列搜索最近的条目。这是一个带有时区的日期时间字段(即时区。现在) 当我执行 User.find(:all, :conditions => ["last_login_at < ?", 24.hours.ago]) 它仍然返回0个结果。我知道有些条目属于这一类。确保数据库中记录的时区与rails应用程序输出的时区相等。这有时会引起问题。否则,请尝试此命名范围: class User < ActiveRecord::Base
时区。现在
)
当我执行
User.find(:all, :conditions => ["last_login_at < ?", 24.hours.ago])
它仍然返回0个结果。我知道有些条目属于这一类。确保数据库中记录的时区与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.where(last_login_at: 3.days.ago..DateTime.now)
似乎我比较的时区都是PST-08:00,所以我还是停留在那里。。。命名的作用域应该工作得很好!谢谢这很好,谢谢。有一个注释-名为_scope的已更改为“scope”(我在Rails 3.2.11上)。这很好,但请记住3.days.ago不是从一天的开始(00)开始的,因此它将跳过在该天之前但在该时间之前创建的记录。检查
3.天之前.开始一天的时间
。
User.last_loggedin_before 24.hours.ago
User.last_loggedin_within 24.hours.ago
User.where(last_login_at: 3.days.ago..DateTime.now)