我有訂單模型和下面一個範圍容器模型:Rails的活動記錄範圍
class Order < ActiveRecord::Base
has_many :containers, inverse_of: :order, dependent: :destroy
end
class Container < ActiveRecord::Base
scope :full_pickup_ready, -> { where.not(full_pickup_ready_date: nil) }
end
順序模式有一個現場電話quantity
代表集裝箱訂單的數量要求但不一定是容器關聯的大小,因爲並非所有容器數據都是在創建訂單時輸入的。
我想根據具有full_pickup_ready_date的容器的計數是否小於訂單的數量字段,訂單模型上有一個作用域。
我知道我可以使用的命令模式合併來訪問這樣的容器範圍:
def self.at_origin
joins(:containers).merge(Container.full_pickup_ready).uniq
end
,但我怎麼能限制範圍的訂單,其中容器用full_pickup_ready_date總數爲少於訂單上的數量字段?
UPDATE: 這是相當接近的,但我不認爲使用select
是有效的:
includes(:containers).select {|o| o.containers.full_pickup_ready.size < o.quantity }
什麼是'carrier_collected_full'對象?它是一個集合還是一個容器? – kurenn
對不起,這是我複製錯誤的範圍(我有幾個範圍與類似的問題)。它應該是容器模型'full_pickup_ready'中的範圍。我改變了上面的使用'full_pickup_ready'範圍。 –