这是一个直截了当的问题。我遇到了这个错误
NoMethodError: undefined method where for #<Class:0x00000004eef3c8>
当我尝试执行此ActiveRecord查询时
accounts = Account.where("created_at > #{Date.today.prev_year}").limit(10)
我不明白为什么会这样。我正在尝试从上一年的日期获得带有created_at时间戳的10个项目的数组。
API activerecord docs说明了示例,我的语法似乎正确。此外,轨道指南上的红宝石也提供了此示例Client.where("orders_count = '2'")
。我不明白为什么我无法执行查询。有人可以解释一下吗?感谢。
答案 0 :(得分:4)
“.where”和“.limit”语法不在rails 2.3中。此外,条件是错误的 - Date.today.prev_year将给出时间的字符串版本,如"2013-09-30 16:35:36 +0100"
。您需要将它与不同的数据库时间字符串格式进行比较。最好让rails处理转换。
试试这个:
accounts = Account.find(:all, :conditions => ["created_at > ?", 1.year.ago.to_date], :limit => 10)
编辑:顺便说一句,您可以使用
将时间/日期转换为相关的数据库格式mytime.to_s(:db)
请记住,在数据库中这是有效的字符串比较,所以如果你想把它放在where字符串中,你需要将它包装在引号中。
accounts = Account.find(:all, :conditions => {"created_at > '#{1.year.ago.to_date.to_s(:db)}'"}, :limit => 10)
或
accounts = Account.find(:all, :conditions => {"created_at > #{1.year.ago.to_date.to_s(:db),inspect}"}, :limit => 10)