我不确定以前是否有人注意到这一点,因为我找不到有关此问题的任何主题。但是假设你有一个 Product 模型和一个 Cart 模型,它设置了has_many :products
. 和 Product 模型集,当您将产品实例(这是指关联购物车的 id 的外键)belongs_to :cart
设置为 时,会发生奇怪的事情。可能会发生三件事:cart_id
nil
cart_id
如果您在将关联产品设置为之前已经检索了关联的购物车nil
,那么当您使用其实例方法销毁该购物车实例时destroy()
,关联的产品也会被销毁。如果在将关联产品设置为 之后检索关联的购物车
cart_id
,nil
当您使用其实例方法销毁它时destroy
,关联的产品不会被销毁。如果您取消关联产品的 并在购物车 ( ) 上
cart_id
调用 CLASS METHOD ,则关联产品不会被销毁destroy
Cart.destroy(cart_id)
我很确定这与has_many
. 当您检索它时,关系的状态可能会硬连线到模型实例。请看下面的代码:
这是我用来测试上述内容的示例代码(假设您已经拥有上述 2 个模型表)
Cart.create # Assume this one has an id of 1
Product.create(cart_id: 1)
cart=Cart.find(1) # Retrieve the cart before
Product.find(1).update_attribute!(cart_id: nil)
cart.destroy
Product.find_by_id(1) # nil; the associated product was destroyed
Cart.create # Assume this one has an id of 1
Product.create(cart_id: 1)
Product.find(1).update_attribute!(cart_id: nil)
cart=Cart.find(1) # Retrieve the cart AFTER
cart.destroy
Product.find_by_id(1) # [<Product id:1 cart_id:1 ....>], the assoc product WAS NOT destroyed
Cart.create # Assume this one has an id of 1
Product.create(cart_id: 1)
Product.find(1).update_attribute!(cart_id: nil)
Cart.destroy(1)
Product.find_by_id(1) # [<Product id:1 cart_id:1 ....>], the assoc product WAS NOT destroyed