我需要查询一天内的评论。该字段是标准时间戳的一部分,是created_at。所选日期来自date_select。
我怎么用ActiveRecord来做呢?
我需要这样的东西:
"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
我需要查询一天内的评论。该字段是标准时间戳的一部分,是created_at。所选日期来自date_select。
我怎么用ActiveRecord来做呢?
我需要这样的东西:
"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
当前回答
您可以使用下面的gem来查找日期之间的记录,
这个宝石很容易使用和更清楚的由星我使用这个宝石和API更清楚和文档也很好地解释了。
Post.between_times(Time.zone.now - 3.hours, # all posts in last 3 hours
Time.zone.now)
在这里你可以通过我们的领域也Post。by_month("January", field::updated_at)
请查看文档并尝试一下。
其他回答
如果你只想休息一天,这样做会更容易:
Comment.all(:conditions => ["date(created_at) = ?", some_date])
Comment.find(:all, :conditions =>["date(created_at) BETWEEN ? AND ? ", '2011-11-01','2011-11-15'])
Rails 5.1引入了一个新的日期帮助方法all_day,参见:https://github.com/rails/rails/pull/24930
>> Date.today.all_day
=> Wed, 26 Jul 2017 00:00:00 UTC +00:00..Wed, 26 Jul 2017 23:59:59 UTC +00:00
如果你使用的是Rails 5.1,这个查询看起来像这样:
Comment.where(created_at: @selected_date.all_day)
这段代码应该为你工作:
Comment.find(:all, :conditions => {:created_at => @selected_date.beginning_of_day..@selected_date.end_of_day})
要了解更多信息,请查看时间计算
注意:此代码已弃用。如果您使用的是Rails 3.1/3.2,请使用答案中的代码
有几种方法。你可以使用这个方法:
start = @selected_date.beginning_of_day
end = @selected_date.end_of_day
@comments = Comment.where("DATE(created_at) BETWEEN ? AND ?", start, end)
或:
@comments = Comment.where(:created_at => @selected_date.beginning_of_day..@selected_date.end_of_day)