1

我正在学习 Rails,并且正在阅读《Beginning Rails 3》一书。当你有一个has_many关联时,你会自动接收方法。

假设用户有很多文章。

user.articles.delete(article)

现在该行仅将文章的外键设置为“NULL”。如果您希望文章从数据库中消失,您还必须销毁/删除文章是否正确,或者是否有一种方法可以同时做到这一点?

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

4

1 回答 1

2

delete和之间有一些区别destroy

删除方法本质上是删除一行..就是这样..

另一方面,destroy允许您有更多选择:

  • 它将检查任何回调,例如 before_delete,或模型上指定的任何依赖项。
  • 它还将把刚刚被删除的对象保留在内存中;因此,它允许您留言,例如:“Article #{article.id} 已删除!!”</li>
  • 以及您问题的答案:它将删除与该对象关联的所有子对象。

所以,而不是

user.articles.delete(article)

您可以使用

user.articles.destroy(article)

这样,您将防止数据库上出现任何孤立行。

于 2012-07-22T10:54:14.357 回答