Rails查询两次

时间:2012-05-28 02:00:19

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我有一个拥有Checkin型号的rails应用。我想查找当天特定时间范围内的所有记录。如何编写where以获取在下午12点到下午4点半之间创建的所有记录?

3 个答案:

答案 0 :(得分:44)

@ x1a4的回答应该对你有好处,但你可以使用范围以更易读,更简洁的方式做到这一点。

 Checkin.where(created_at: Time.parse("12pm")..Time.parse("4:30pm"))

它应该产生类似的东西:

SELECT "checkins".*
FROM "checkins" 
WHERE ("checkins"."created_at" BETWEEN '2012-05-28 12:00:00.000000' AND '2012-05-28 16:30:00.000000')

您可以使用任何其他方式更改Time.parse("12pm")以创建时间。

答案 1 :(得分:8)

看起来它会起作用,假定为UTC时区:

Record.where('created_at > ? AND created_at < ?', Date.today + 12.hours, Date.today + 16.5.hours)

或使用BETWEEN

Record.where('created_at BETWEEN ? AND ?', Date.today + 12.hours, Date.today + 16.5.hours)

BETWEEN可能包含或不包含范围中的第二个值。 Postgres includes it

答案 2 :(得分:0)

您可以使用以下gem来查找日期之间的记录,

gem非常容易使用且更加清晰[By star] [1]。我正在使用这个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)

请参阅文档并试用。