2010-09-29 21 views
9

Ben şöyle iki değişkenleri tanımlamak için çalışıyorum:Yok olmayan bir alan olan tüm kayıtları bul?

  1. @orders = Customer.find_all_by_order_date (nil)
  2. @nonorders = Customer.find_all_by_order_date (! Nil)

ilk eserler düzgün ama ikinci değil. Order_date alanları sıfır olmayan bu müşterileri nasıl bulabilirim?


@nonorders = @ customer.orders.find (: tümü,: koşullar => "@ customer.orders.order_date IS NOT NULL"):

bana aşağıdaki hata veriyor

tanımsız yöntem `extract_options_from_args! ' ActiveRecord :: Temel: Sınıf

@ orders.order_date, @ customer.order.order_date, vb. gibi koşulları değiştirmeyi denedim Bu hataya neden olan nedir? Teşekkür ederim!

+0

, model için genellikle sınıf adı ilk harfleri tekil harf vardır olduğunu. Ve veritabanı tablosu adı genellikle küçük, çoğul. Bu yüzden, Customer.find (: all,: conditions => "customers.date IS NULL" olmalidir) Bu sorunu kontrol etmelisiniz. Her zamanki tekil yerine birden çok model adı (Müşteriler yerine Müşteriler), sw'yi oluştururken çok karışıklığa neden olabilir. –

+0

Çok sayıda müşteri maalesef bir yazım hatasıydı - Sistemimde Müşteriyi kullanıyorum. Teşekkürler Larry! – sscirrus

cevap

21

raylar 3.:

@nonorders = Customers.where("customers.date IS NOT NULL") 

Rails2:

@nonorders = Customers.find(:all, :conditions => "customers.date IS NOT NULL") 
+0

Merhaba Yannis, maalesef hala bir hata mesajı alıyorum. – sscirrus

+1

veya @nonorders = Customer.find (: all,: include =>: orders,: conditions => ["orders.order_date IS NULL AND customers.id =?", @ Customer.id]) – Bohdan

1

siz geçmesine dizesi: koşullar bir sql parçası olması gerekiyor.

Verilen örnekte "customers.date", müşteri tablosunun tarih alanını gösterir. Tablo adı bağlamdan açıkça görüldüğünden, "müşteriler" bitinin kesinlikle gerekli olmadığını düşünüyorum. Örnekte

şu çalışmalıdır: Rails

@nonorders = @customer.orders.find(:all, :conditions => "order_date IS NOT NULL") 
İlgili konular