我需要查询一天内的评论。该字段是标准时间戳的一部分,是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'"

当前回答

我个人会创建一个范围,使其更具可读性和可重用性:

在你的评论中。Rb,你可以定义一个范围:

scope :created_between, lambda {|start_date, end_date| where("created_at >= ? AND created_at <= ?", start_date, end_date )}

然后到查询之间创建:

@comment.created_between(1.year.ago, Time.now)

希望能有所帮助。

其他回答

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)

有几种方法。你可以使用这个方法:

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)

如果你只想休息一天,这样做会更容易:

Comment.all(:conditions => ["date(created_at) = ?", some_date])
Comment.find(:all, :conditions =>["date(created_at) BETWEEN ? AND ? ", '2011-11-01','2011-11-15'])

我个人会创建一个范围,使其更具可读性和可重用性:

在你的评论中。Rb,你可以定义一个范围:

scope :created_between, lambda {|start_date, end_date| where("created_at >= ? AND created_at <= ?", start_date, end_date )}

然后到查询之间创建:

@comment.created_between(1.year.ago, Time.now)

希望能有所帮助。