Hata 3

2010-11-18 23 views
1

Ben Raylar için new Active Record Query Interface 3.Hata 3

Eski stil sorgusu kullanmaya çalışıyorum

my_notes = Note.find(:all, :conditions => { :user_id => current_user.id, :date => p[:date] }, :order => "date ASC, created_at ASC") 
yeni tarzında

olduğunu Rails yeni Active kayıt Sorgu Arabirimi kullanmaya çalışırken,

my_notes = Note.find_all_by_user_id_and_date(current_user.id, p[:date]).order('date ASC, created_at ASC') 

ama bu hatayı alıyorum::

NoMethodError in NotesController#play 
undefined method `order' for #<Array:0x00000103d23c38> 
01 Ben bunun olacağını düşündüm

Neyi yanlış yapıyorum? Okuduğunuz için teşekkürler.

+1

O 'find_all' dizisi döndürür anlaşılmaktadır. Belki '' '' ye geçebilirsin? –

cevap

4

yeni sorgu arayüzü biraz farklı çalışır - find_all_by_user_id_and_date sonuçların bir dizi döndürür, order daha sonra kapsamlı edilebilir bir ActiveRecord :: ilişki nesnesi geri ise.

bir çalışma sorgusu

my_notes = Note.order('date ASC, created_at ASC').find_all_by_user_id_and_date(current_user.id, p[:date]) 

olurdu ama genellikle sorgusu için AREL sözdizimi kullanmak daha iyi olacaktır:

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

Ben de öyle dedim :) – Ariejan

+0

@Ariejan Cevabımı yayınladığım zaman değil, gönderildikten sonra fazladan bilgi eklediniz. – nobody

+0

Ah iyi, harika beyinler :) – Ariejan

6

find_all_by_<attritubte>, yeni ARel sözdiziminin bir parçası değildir. Sorguyu hemen yürütür ve sonuçlarla bir Array döndürür. Sorgu zaten yürütüldüğünden, buna order gibi daha fazla seçenek ekleyemezsiniz.

yerine bu deneyin:

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