我正在开发用于创建购物网站特价商品的功能。一个产品可以有一个以上的特殊产品,显然一个特殊产品可以有一个以上的产品。
我正在使用一种has_and_belongs_to_many
关系,所以我宣布:
产品.rb
has_and_belongs_to_many :specials
Special.rb
has_and belongs_to_many :products
现在,使用产品@product
和特殊商品@special
,将像这样创建关联。
@special.products << @product
完成此操作后,将满足以下条件:
@special.products.first == @product
而且,重要的是:
@product.specials.first == @special
当我使用此删除关联时
@special.products.delete(@product)
然后@product
从特价中删除,因此@special.products.first==nil
,但@product
仍包含 @special
,换句话说,@products.specials.first==@special
除了编写delete方法之外,是否有任何适当的方法可以在单个调用中做到这一点?
collection.delete(object,…)
通过从联接表中删除对象的关联,从集合中删除一个或多个对象。这不会破坏对象。
您可以使用:
product = Product.find(x)
special = product.specials.find(y)
product.specials.delete(special)
这会为您要删除的两个对象创建ActiveRecord对象,从而为函数提供了清晰的定义
清除
通过从联接表中删除它们的关联,从集合中删除所有对象。这不会破坏对象。
在此示例中:
product = Product.find(x)
product.specials.clear
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句