【问题标题】:Deleting objects from associations in Rails从 Rails 中的关联中删除对象
【发布时间】:2025-12-22 06:30:16
【问题描述】:

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

假设用户有很多文章。

user.articles.delete(article)

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

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

【问题讨论】:

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


    【解决方案1】:

    deletedestroy 之间存在一些差异。

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

    另一方面,destroy 为您提供更多选择:

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

    所以,而不是

    user.articles.delete(article)
    

    你可以使用

    user.articles.destroy(article)
    

    通过这种方式,您将防止数据库中出现任何孤立行。

    【讨论】:

    • 这和 REST 有什么关系?
    • @Beerlington - 你是对的,路线和方法删除之间没有关系。我将编辑答案...