2

我试图弄清楚如何在created_at.year== 给定年份和created_at.month给定月份的情况下进行查询。

但是我无法弄清楚我做错了什么。

Model.where("'created_at.month' = ? AND 'created_at.year' = ?", 7,2013)

结果什么都没有显示。

但是,当我尝试Model.first.created_at.month ==7并且 Model.first.created_at.year ==2013我对两者都正确时。

因此理论上我的查询应该至少返回我的第一条记录。

任何人都知道我做错了什么或任何替代方法来查找特定月份创建的记录?

请注意,在我看来,月/年将是参数,但出于本示例的目的,我使用了实际值。

使用 ruby​​ 1.9.3 轨道 3.2.13

4

2 回答 2

3

您可以使用extractSQL 函数,它将提取时间戳的月份和年份:

Model.where('extract(year from created_at) = ? and extract(month from created_at) = ?', '2013','7')

此查询应为您提供所需的结果。

于 2013-07-03T06:57:41.287 回答
2

created_at是一个时间戳;它不是数据库中的一组离散字段。created_at.year并且您的数据库中不存在此类;它只是一个时间戳字段。当您调用 时@model.created_at.year,Rails 正在从数据库中加载created_at字段,并从中创建一个 Time 对象,该对象具有#year您可以调用的方法。

您想要的是查询一系列日期:

Model.where("created_at >= ? and created_at < ?", Time.mktime(2013, 7), Time.mktime(2013, 8))

这将在 2013 年 7 月找到任何具有 created_at 时间戳的模型。

于 2013-07-03T03:21:03.063 回答