从Rails中的关联中删除对象

时间:2012-07-22 10:33:06

标签: ruby-on-rails ruby ruby-on-rails-3

我正在学习Rails,我正在阅读Beginning Rails 3书。当您拥有has_many关联时,您会自动收到方法。

假设用户有很多文章。

user.articles.delete(article)

现在该行只将文章的外键设置为“NULL”。如果你想让它从数据库中消失,你是否也必须销毁/删除文章,或者是否有一种方法同时执行它?这是正确的吗?

如果在删除关联之前销毁与用户有关系的文章,会发生什么?

1 个答案:

答案 0 :(得分:2)

deletedestroy之间存在一些差异。

删除方法基本上删除了一行...就是它..

另一方面,destroy允许您提供更多选项:

  • 它将检查任何回调,例如before_delete,或模型上指定的任何依赖项。
  • 它还会保留刚刚在内存中删除的对象;因此,它允许您留下一条消息,例如:“文章#{article.id}已删除!!”
  • 您的问题的答案:它将删除与该对象关联的所有子对象。

所以,而不是

user.articles.delete(article)

你可以使用

user.articles.destroy(article)

通过这种方式,您可以防止数据库中存在任何孤立的行。