在我的模型中,我定义了以下范围:
scope :today, -> { where time_start: Date.today }
这不起作用,因为我正在将mysql日期时间与日期进行比较。我正在尝试执行相当于date()mysql函数的操作(从datetime中提取日期)。
试试这个:
scope :today, -> { where time_start: Date.today.beginning_of_day..Date.today.end_of_day }
在条件中使用范围将生成BETWEEN
查询,类似于以下内容:
SELECT "models".* FROM "models"
WHERE (
"models"."time_start" BETWEEN
'2016-07-29 00:00:00.000000' AND '2016-07-29 23:59:59.999999'
)
正如Nic Nilov所建议的,这是一种方法
其他方式,你可以这样做:
scope :today, -> { where("date(time_start) = ?", Date.today) }
结果查询为:
从
users
中选择users
.*其中(日期(time_start)='2016-07-29')
我有一个名为by_star
的gem,它可以让您在不在模型中编写任何代码的情况下完成这项工作。
此代码:
User.today
将获取当天创建的所有用户。如果您想使用time_start
,请执行以下操作:
User.today(field: :time_start)