中在我的模型我定义的范围如下:轨道转换日期时间,以日期范围
scope :today, -> { where time_start: Date.today }
这不是工作,因为我比较反对的日期一个MySQL日期时间。 我正在尝试做相当于date()mysql函数(从日期时间提取日期)。
中在我的模型我定义的范围如下:轨道转换日期时间,以日期范围
scope :today, -> { where time_start: Date.today }
这不是工作,因为我比较反对的日期一个MySQL日期时间。 我正在尝试做相当于date()mysql函数(从日期时间提取日期)。
试试这个:
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'
)
正如尼克Nilov建议,那就是这样做的一种方式。
其他方式,你可以这样做:
scope :today, -> { where("date(time_start) = ?", Date.today) }
合力查询是:
选择
。users
* FROMusers
WHERE(日期(TIME_START)= '2016年7月29日')
我有一个名为by_star
的宝石,它可以让你做到这一点,而无需在模型中编写任何代码。
此代码:
User.today
将获取当前日期中创建的所有用户。如果你想使用time_start
代替,这样做:
User.today(field: :time_start)
感谢尼克,我想到了这个解决方案,但感觉就像一个黑客 – mrtnmgs
这是没有办法破解。实际上,很多人会认为这是一种Rails的做法,而不是在查询中使用原始的和潜在的供应商特定的字符串。 –
哦,伟大的一点!我会改变接受的答案。再次感谢! – mrtnmgs