在哪里使用依赖:: destroy

时间:2015-03-19 09:31:06

标签: ruby-on-rails

假设User有很多Receipt,我希望在删除父Receipt实例时销毁User的所有实例。

写作之间有什么区别:

(1)在User模型中,has_many :receipts, dependent: :destroy

(2)在Receipt模型中,belongs_to :user, dependent: :destroy

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

  

(1)在用户模型中,has_many:收据,依赖:: destroy

如果用户被销毁,其关联的收据也将被销毁。

  

(2)在收据模型中,belongs_to:user,dependent :: destroy

如果销毁的收据超过其父用户将被销毁,则其他关联的收据不会被销毁,但会被孤立。根据{{​​3}}

  

当使用belongs_to时,不应指定此dependent:选项   与另一个类的has_many关系相结合因为   留下孤儿记录的可能性。

答案 1 :(得分:1)

(1)在用户模型中,has_many:收据,依赖:: destroy

此处,如果用户销毁,则所有相关收据将被销毁

(2)在收据模型中,belongs_to:user,dependent :: destroy

如果Receipt被破坏,那么归属用户将被销毁

您可以使用以下三种形式指定:dependent选项:

  • :destroy /:destroy_all关联的对象将被销毁 这个对象通过调用他们的destroy方法
  • :delete /:delete_all立即销毁所有关联对象 没有调用他们的:destroy方法
  • :nullify所有关联的对象'外键设置为NULL而不是 调用他们的保存回调