0

私はこの構成を持っています:

model Box < ActiveRecord::Base
  has_many :toys
  has_many :inventories, :through => :toys

  scope :for_inventory, lambda{ |inv| joins(:toys).where("toys.inventory_id = ?",inv) }
end

model Toy < ActiveRecord::Base
  belongs_to :box
  belongs_to :inventory
end

model Inventory < ActiveRecord::Base
  has_many :toys
  has_many :boxes, :through => :toys
end

さて、ここに心配があります、

Inventory.find(2).boxes.count
>> 140

その間

Box.for_inventory(2).count
>> 506
Box.for_inventory(2).uniq.count
>> 506

Boxが複数含まれている場合は、Toys数回返されます。したがって、クラスの<=>演算子をオーバーライドして、実際に何かを実行し、リストを506から140に減らすことができると思いました。しかし、スコープを変更して要求時に変更するより良い方法はありませんか?Box.uniqBox::for_inventory

4

0 に答える 0