Rails:通过created_at beginning_of_week查找记录

时间:2018-02-02 11:18:47

标签: ruby-on-rails ruby

有没有办法通过created_at找到记录:beginning_of_week?
类似的东西:

Message.find_by(created_at: Date.today.beginning_of_week). 

但它没有用。

1 个答案:

答案 0 :(得分:2)

由于created_atDateTime对象,其中包含日期和时间值,因此

Message.find_by(created_at: Date.today.beginning_of_week)
# Message Load (6.2ms)  SELECT  "messages".* FROM "messages" WHERE "messages"."created_at" = $1 LIMIT $2  [["created_at", "2018-01-29"], ["LIMIT", 1]]

...将尝试查找完全2018-01-29 00:00:00的记录,这是一条完全在午夜创建的消息记录,而不是您可能预期的2018-01-29。你不希望这样,而是想要在那一天创建的任何记录(就我理解你的问题而言)。因此,您可以尝试以下方法。

date_beginning_this_week = Date.today.beginning_of_week
Message.where(created_at: date_beginning_this_week..(date_beginning_this_week + 1.day))
# Message Load (0.2ms)  SELECT  "messages".* FROM "messages" WHERE ("messages"."created_at" BETWEEN $1 AND $2) LIMIT $3  [["created_at", "2018-01-29"], ["created_at", "2018-01-30"], ["LIMIT", 11]]