0
我試圖做一個元搜索或者一個範圍,它給了我沒有任何has_many-association等於類型==「Something」的所有對象。metasearch has_many所有/ none必須匹配
例子:
class Order < ActiveRecord::Base
has_many :billing_base
end
class InvoiceBase < ActiveRecord::Base
belongs_to :order
end
class Invoice < InvoiceBase
end
class OrderAcknowledgement < InvoiceBase
end
搜索有發票很容易通過自定義的範圍做訂單:
joins(:invoice_base).where(:invoice_base => {:type => "Invoice"})
或垂直搜索:
:invoice_base_type_equals => "Invoice"
現在我該怎麼辦相反,找到沒有發票的訂單? (應始終允許OrderAcknowledgements)
這實際上是我現在這樣做的方式(添加「where type ='Invoice'」),但我不確定它是否足夠高效,因爲考慮到「NOT IN (ID列表)「將成爲千位ID的列表。 – vimaz
由於發票庫存儲了外鍵值,並且您希望查找所有未連接到發票庫的訂單,所以您必須全部檢查它們。想想它就像比較Ruby中的數組。我同意這不是最漂亮的事情。但是,在數據庫級別的索引列上執行此操作將比在軟件方面進行比較快得多。特別是當桌子變大時。 – agmcleod
這確實有用,但只要你有幾千條記錄,NOT IN開始變得非常昂貴。我覺得那裏有更好的解決方案。 – DavidMann10k