我想提出这个问题:
sector.posts.count(:conditions => {:created_at.month => 1..3})
然而,它返回:
NoMethodError:未定义的方法`month'for:created_at:Symbol
但如果我在控制台中执行post.created_at.month
,它将返回该月的整数值。我如何完成我想要的查询?
答案 0 :(得分:2)
在这种情况下,您可以使用count方法。 More on sql conditions
你所做的就是调用count方法:
sector.posts.count(conditions: 'MONTH(created_at) in (1,2,3)')
或更好的方法:
sector.posts.where('MONTH(created_at) in (1,2,3)').count
答案 1 :(得分:0)
您正在尝试在查询中的符号:created_at上调用方法。在控制台示例中,您将针对ActiveRecord对象调用该方法。
如果您尝试从日期范围内获取结果,请使用BETWEEN查询(至少在Mysql或Postresql上)并设置范围的开始和结束日期。
sector.posts.where(["'posts.created_at' BETWEEN ? AND ?", Date.new(2013,1,1), Date.new(2013,3,31)])
如果您的查询需要动态,您还可以使用begin_of日期方法,例如beginning_of_quarter。他们非常强大。