У меня модель заказа и модель контейнера с областью, как показано ниже:Рельсы активная запись сфера на основе подсчета has_many объема
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
, который представляет собой количество контейнеров под заказ требует, но необязательно, размера ассоциации контейнеров, поскольку не все данные контейнера вводятся во время создания заказа.
Я хотел бы иметь область действия модели заказа, основанную на том, меньше ли количество контейнеров с полным_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». –