2010-11-18 9 views
1

私はRailsのためのnew Active Record Query Interface 3.エラー3

私の古いスタイルのクエリを使用しようとしているが、

my_notes = Note.find(:all, :conditions => { :user_id => current_user.id, :date => p[:date] }, :order => "date ASC, created_at ASC") 
新しいスタイルで

あるRailsの中に新しいActive Recordのクエリーインターフェイスを使用しようとすると、私はそれが可能だろうと思った:

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'は配列を返すことが表示されます。おそらくあなたは 'どこに'に切り替えることができますか? –

答えて

4

を新しいクエリインターフェイスが若干異なる動作を - orderはその後さらにスコープすることができますのActiveRecord ::関連オブジェクトを返すのに対しfind_all_by_user_id_and_dateは、結果の配列を返します。

作業クエリが

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

+0

@Ariejan私は私の答えを投稿した時点ではなかった、あなたは私が投稿した後に追加情報を追加しました。 – nobody

+0

ああ、素晴らしい心:) – Ariejan

6

find_all_by_<attritubte>は、新しいARel構文の一部ではありません。クエリを直ちに実行し、結果を含む配列を返します。クエリは既に実行されているため、orderなどのオプションは追加できません。

は、代わりにこれを試してみてください:

Note.find.where(:user_id => current_user.id, :date => p[:date]).order('date ASC, created_at ASC') 
関連する問題