2010-11-18 56 views
1

我試圖使用new Active Record Query Interface爲Rails 3錯誤嘗試使用新的活動記錄查詢界面中的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> 

我在做什麼錯?謝謝閱讀。

+1

看來,'find_all'返回數組。也許你可以切換到「哪裏」? – 2010-11-18 10:35:06

回答

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 
+0

這就是我說:) – Ariejan 2010-11-18 10:30:38

+0

@Ariejan當時我沒有發佈我的答案,它不是,我發佈後添加額外的信息。 – nobody 2010-11-18 10:32:46

+0

嗯,偉大的思想:) – Ariejan 2010-11-18 11:00:14

6

find_all_by_<attritubte>不是新的ARel語法的一部分。它立即執行查詢並返回一個包含結果的數組。由於查詢已執行,因此您無法再添加其他選項,例如order

試試這個:

Note.find.where(:user_id => current_user.id, :date => p[:date]).order('date ASC, created_at ASC')