2016-07-28 74 views
0

中在我的模型我定义的范围如下:轨道转换日期时间,以日期范围

scope :today, -> { where time_start: Date.today } 

这不是工作,因为我比较反对的日期一个MySQL日期时间。 我正在尝试做相当于date()mysql函数(从日期时间提取日期)。

回答

0

试试这个:

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' 
    ) 
+0

感谢尼克,我想到了这个解决方案,但感觉就像一个黑客 – mrtnmgs

+0

这是没有办法破解。实际上,很多人会认为这是一种Rails的做法,而不是在查询中使用原始的和潜在的供应商特定的字符串。 –

+0

哦,伟大的一点!我会改变接受的答案。再次感谢! – mrtnmgs

2

正如尼克Nilov建议,那就是这样做的一种方式。
其他方式,你可以这样做:

scope :today, -> { where("date(time_start) = ?", Date.today) } 

合力查询是:

选择users * FROM users WHERE(日期(TIME_START)= '2016年7月29日')

0

我有一个名为by_star的宝石,它可以让你做到这一点,而无需在模型中编写任何代码。

此代码:

User.today 

将获取当前日期中创建的所有用户。如果你想使用time_start代替,这样做:

User.today(field: :time_start)