Ich habe Auftragsmodell und ein Container-Modell mit einem Rahmen, wie nachstehend:Rails aktiver Bereich Datensatz basierend auf Anzahl des has_many Umfangs
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
Die Reihenfolge Modell quantity
einen Feldaufruf aufweist, die die Menge von Behältern repräsentieren die Reihenfolge erfordert aber nicht notwendigerweise die Größe der Containerverknüpfung, da nicht alle Containerdaten zum Zeitpunkt der Auftragserstellung eingegeben wurden.
Ich möchte einen Bereich auf dem Bestellmodell basierend darauf haben, ob die Anzahl der Container mit einem full_pickup_ready_date kleiner als das Mengenfeld der Bestellung ist.
Ich weiß, dass ich in der Größenordnung Modell fusionieren können den Umfang auf die Behälter wie diese zuzugreifen:
def self.at_origin
joins(:containers).merge(Container.full_pickup_ready).uniq
end
aber wie kann ich den Umfang Aufträge beschränken, in denen die Gesamtzahl der Behälter mit einem full_pickup_ready_date ist weniger als das mengenfeld auf der bestellung?
UPDATE: dies ziemlich nahe ist, aber ich glaube nicht, mit der select
effizient ist:
includes(:containers).select {|o| o.containers.full_pickup_ready.size < o.quantity }
Was ist das 'Objekt carrier_collected_full'? Ist es eine Sammlung oder nur ein Container? – kurenn
Sorry, das war ich kopiere den falschen Bereich (ich habe mehrere Bereiche mit einem ähnlichen Problem). Es sollte der Bereich im Containermodell 'full_pickup_ready' sein.Ich habe das obige geändert, um den 'full_pickup_ready'-Bereich zu verwenden. –