2010-09-29 91 views
9

我試圖定義兩個變量如下:查找具有非零字段的所有記錄?

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

第一工作正常但第二個沒有。如何找到那些order_date字段不爲零的客戶?


@nonorders = @ customer.orders.find(:全部:條件=> 「@ customer.orders.order_date IS NOT NULL」)

是給我下面的錯誤:

未定義的方法`extract_options_from_args!'對於ActiveRecord :: Base:

我試過改變條件,比如@ orders.order_date,@ customer.order.order_date等。什麼原因導致了這個錯誤?謝謝!

+0

在Rails中,通常用於模型類名首字母大寫,單數。數據庫表名通常是小寫,複數。所以它應該是Customer.find(:all,:conditions =>「customers.date IS NOT NULL」)你應該檢查這個問題。一個複數模型的名稱,而不是通常的單數(客戶,而不是客戶)可以導致很多混亂,因爲你建立你的SW。 – 2010-09-29 20:29:17

+0

複數客戶不幸是一個錯字 - 我在我的系統中使用客戶。謝謝Larry! – sscirrus 2010-09-29 20:36:46

回答

21

Rails3中:

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

Rails2:

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

嗨Yannis,我上傳了一個後續問題......不幸的是,仍然收到錯誤。 – sscirrus 2010-09-29 21:22:25

+1

或@nonorders = Customer.find(:all,:include =>:orders,:conditions => [「orders.order_date IS NOT NULL AND customers.id =?」,@ customer.id]) – Bohdan 2010-09-29 21:31:59

1

你爲合格字符串:條件必須是一個SQL片段。

在給出的例子「customers.date」指客戶表的日期字段。我認爲「客戶」位不是絕對必要的,因爲表格名稱在上下文中是清楚的。

在您的例子下面應該工作:

@nonorders = @customer.orders.find(:all, :conditions => "order_date IS NOT NULL") 
相關問題