2013-10-16 29 views
0

我已經在我的控制下得到一組數據的視圖來顯示如何訂購,我已經使用在軌道select語句

@orders = Order.select{|order| [email protected]}.select{|order| order.clip_status==true}.select{|order| order.dc>0}.select{|order| ((Time.now.to_date..(CustomVideo.find_by_order_id(order.id).created_at.to_date+30.days)).count-1)<0} 

現在我需要根據責令其得到的結果創建的日期。

我嘗試以下,並得到了錯誤:

@orders = Order.select{|order| [email protected]}.select{|order| order.clip_status==true}.select{|order| order.dc>0}.select{|order| ((Time.now.to_date..(CustomVideo.find_by_order_id(order.id).created_at.to_date+30.days)).count-1)<0}.order('created_at DESC') 

而且我得到一個錯誤。我該如何解決這個問題?

undefined method `order' for []:Array 
+0

爲什麼所有'select'塊和沒有'where'子句? – zwippie

+0

我試過了,但是我不想用這個部分來做'select {| order | order.dc> 0}' – Aravind

回答

2

你的問題來自於select濫用 - 使用select彷彿ActiveRecord::Relation是通常的陣列 - 並選擇使用這種方式確實返回Array實例,該實例並不ActiveRecord範圍作出迴應。我建議你使用where當它是可能的,使用select與塊後應用了所有AR範圍,這樣的(這將返回Array):

@orders = Order.where('your conditions').order('created_at DESC').select { |order| order.dc > 0 } 

BTW,實際上有可能取代過去selectwhere(這是更有效率),如下所示:

Order.where('dc > ?', 0) 
+0

在提出問題之前,我在輸入問題和測試時錯誤地忽略了''。將更新問題。 – Aravind

+0

@Aravind現在你的問題可能是'未定義的'Array'的順序'。如果是這樣,這是因爲濫用'select'。 –

+0

我可以使用where語句來解決這個問題。但我不確定如何使用'select {| order | order.dc> 0}'使用'where'語句。我試過'where(:order> 0)',這顯然是錯誤的。我該怎麼辦? – Aravind