如何在Rails 4.2和sqlite中按星期几来过滤?

时间:2015-04-06 16:13:33

标签: ruby-on-rails ruby ruby-on-rails-4 sqlite

如何按周中的每一天检索记录?

这是我的范围:

scope :day_of_week, ->(day_of_week) { where("created_at = ?", day_of_week ) }

我已经尝试过strftime('%w',day_of_week)和DAYOFWEEK()但没有成功。

我正在使用几个月和几年没有问题,我在计算我的观点。我也计算每周的项目,即使我没有收到语法错误,我收到的是0.

3 个答案:

答案 0 :(得分:2)

date = DateTime.now
#=> Mon, 06 Apr 2015 20:02:00 +0200
date.strftime('%A')
#=> "Monday"

因此,如果created_at.strftime('%A')等于您感兴趣的day_of_week,则需要检查。

答案 1 :(得分:1)

scope :day_of_week, ->(day_of_week) { where("strftime('%w', created_at) = ?", day_of_week.to_s) }

是解决方案。我不太清楚为什么.to_s有效,但似乎文档不清楚。如果我们认为strftime意味着“String to Time type”,那么它应该需要一个字符串。

答案 2 :(得分:0)

如果有人坚持使用它,则Radolino的答案有效,但是'%w'会返回您星期几的ID,如下所示:

Sunday: 0, Monday: 1, Tuesday: 2, Wednesday: 3, Thursday: 4, Friday: 5, Saturday: 6

但是rails方法Date::DAYS_INTO_WEEK会给您这个ID:

Sunday: 6, Monday: 0, Tuesday: 1, Wednesday: 2, Thursday: 3, Friday: 4, Saturday: 5

因此,您需要在过滤之前检查params