我正在开发用于创建购物网站特价商品的功能。一个产品可以有一个以上的特殊产品,显然一个特殊产品可以有一个以上的产品。

我正在使用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方法之外,是否有任何适当的方法可以在单个调用中做到这一点?

最佳答案

According to the Rails documentation:



Brilliant reference here for you

您可以使用:

product = Product.find(x)
special = product.specials.find(y)

product.specials.delete(special)

这会为您要删除的两个对象创建ActiveRecord对象,从而为函数提供了清晰的定义



在此示例中:
product = Product.find(x)

product.specials.clear

关于ruby-on-rails - Rails HABTM-正确删除关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21278986/

10-10 19:58