Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails按日期时间范围查询(最近24小时、48小时等)_Ruby On Rails_Datetime_Range - Fatal编程技术网

Ruby on rails RubyonRails按日期时间范围查询(最近24小时、48小时等)

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

我正试图构建一个查询,根据“last_login_at”列搜索最近的条目。这是一个带有时区的日期时间字段(即
时区。现在
) 当我执行

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)