1

我想做这个查询:

sector.posts.count(:conditions => {:created_at.month => 1..3})

但是,它返回:

NoMethodError: :created_at:Symbol 的未定义方法“月”

但如果我post.created_at.month在控制台中这样做,它会返回月份的整数值。我将如何完成我要进行的查询?

4

2 回答 2

2

在这种情况下,您可以使用 count 方法。更多关于 sql 条件的信息。

你所做的就是这样调用 count 方法:

sector.posts.count(conditions: 'MONTH(created_at) in (1,2,3)')

或更好的方法:

sector.posts.where('MONTH(created_at) in (1,2,3)').count
于 2013-04-12T18:23:19.717 回答
0

您正在尝试在查询中调用符号 :created_at 的方法。在您的控制台示例中,您正在针对 ActiveRecord 对象调用该方法。

如果您尝试从某个日期范围内获取结果,请使用 BETWEEN 查询(​​至少在MysqlPostresql上)并设置该范围的开始日期和结束日期。

sector.posts.where(["'posts.created_at' BETWEEN ? AND ?", Date.new(2013,1,1), Date.new(2013,3,31)])

如果您需要动态查询,您还可以使用 begin_of 日期方法,例如begin_of_quarter 。他们非常强大。

于 2013-04-12T18:24:49.270 回答