rails将日期时间转换为范围内的日期



在我的模型中,我定义了以下范围:

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)

相关内容

  • 没有找到相关文章