我正在试图找出如何查询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 rails 3.2.13
答案 0 :(得分: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时间戳的模型。
答案 1 :(得分:2)
您可以使用extract
SQL函数,它将提取时间戳的月份和年份:
Model.where('extract(year from created_at) = ? and extract(month from created_at) = ?', '2013','7')
此查询应该为您提供所需的结果。