我正在尝试将new Active Record Query Interface用于Rails 3.
我的旧样式查询是
my_notes = Note.find(:all, :conditions => { :user_id => current_user.id, :date => p[:date] }, :order => "date ASC, created_at ASC")
在新风格中,我认为它会是:
my_notes = Note.find_all_by_user_id_and_date(current_user.id, p[:date]).order('date ASC, created_at ASC')
但是我收到了这个错误:
NoMethodError in NotesController#play
undefined method `order' for #<Array:0x00000103d23c38>
我做错了什么?谢谢你的阅读。
答案 0 :(得分:6)
find_all_by_<attritubte>
不是新ARel语法的一部分。它立即执行查询并返回带有结果的数组。由于查询已经执行,因此您无法再添加order
等选项。
请改为尝试:
Note.find.where(:user_id => current_user.id, :date => p[:date]).order('date ASC, created_at ASC')
答案 1 :(得分:4)
新的查询接口工作方式稍有不同 - find_all_by_user_id_and_date
将返回一个结果数组,而order
返回一个ActiveRecord :: Relation对象,然后可以进一步限定范围。
工作查询将是
my_notes = Note.order('date ASC, created_at ASC').find_all_by_user_id_and_date(current_user.id, p[:date])
但通常最好为查询使用AREL语法:
my_notes = Note.where(:user_id => current_user.id, :date => p[:date]).order('date ASC, created_at ASC').all