首页 > 解决方案 > 如何准确删除一个 has_and_belongs_to_many 关联?

问题描述

“拥有并属于许多”允许在相同对象之间有多个关联。因此,我正在尝试实现其中可能包含一些产品的购物车。

# /app/models/cart.rb
class Cart < ApplicationRecord
  has_and_belongs_to_many :products
end

.

# /app/models/product.rb
class Product < ApplicationRecord
  has_and_belongs_to_many :carts
end

但是,当我尝试删除一个多对多关联时,它会将它们全部删除:

@cart = Cart.last
@product = Product.last
3.times { @cart.products << @product }
@cart.products.delete(@product)
puts @cart.products.count
# Returns 0; should be 2

有没有办法只删除一个关联?

标签: ruby-on-railsactiverecord

解决方案


你可以这样做。

cart = Cart.find(card_id)
product = cart.products.find(product_id)

cart.products.delete(product)

推荐阅读