向模型的named_scope添加唯一性约束

时间:2013-02-05 13:08:07

标签: ruby-on-rails named-scope

我有这个配置:

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,则会多次返回。 所以,我认为我可以覆盖<=>类的Box运算符,因此.uniq实际上会执行某些操作并将列表从506重新设置为140.但是,有没有更好的方法更改Box::for_inventory范围,以便在请求时执行此操作?

0 个答案:

没有答案