【发布时间】:2016-07-28 21:23:26
【问题描述】:
在我的模型中,我定义了以下范围:
scope :today, -> { where time_start: Date.today }
这不起作用,因为我正在将 mysql 日期时间与日期进行比较。 我正在尝试做相当于 date() mysql 函数(从日期时间中提取日期)。
【问题讨论】:
标签: mysql ruby-on-rails datetime ruby-on-rails-4
在我的模型中,我定义了以下范围:
scope :today, -> { where time_start: Date.today }
这不起作用,因为我正在将 mysql 日期时间与日期进行比较。 我正在尝试做相当于 date() mysql 函数(从日期时间中提取日期)。
【问题讨论】:
标签: mysql ruby-on-rails datetime ruby-on-rails-4
试试这个:
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) }
结果查询将是:
SELECT
users.* FROMusersWHERE (date(time_start) = '2016-07-29')
【讨论】:
我有一个名为 by_star 的 gem,它可以让您无需在模型中编写任何代码即可完成此操作。
这段代码:
User.today
将获取当天创建的所有用户。如果您想改用time_start,请执行以下操作:
User.today(field: :time_start)
【讨论】: