我正在开发一个用于为购物网站创建特价的功能。一种产品可以有多种特殊产品,显然特殊产品可以有多种产品。
我正在使用has_and_belongs_to_many
关系,所以我声明了:
Product.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
除了编写删除方法之外,还有什么方法可以在一次调用中执行此操作吗?
答案 0 :(得分:56)
According to the Rails documentation:
collection.delete(object,...)
从中删除一个或多个对象 通过从连接表中删除它们的关联来进行收集。这个 不破坏物体。
Brilliant reference here for you
您可以使用:
product = Product.find(x)
special = product.specials.find(y)
product.specials.delete(special)
这会为您要删除的对象创建ActiveRecord对象,从而为函数提供明确的定义
<强> collection.clear 强>
从中删除所有对象 通过从连接表中删除它们的关联来进行收集。这个 不破坏物体。
在这个例子中:
product = Product.find(x)
product.specials.clear