gpt4 book ai didi

ruby-on-rails - Ruby ActiveRecord 模型中的级联删除?

转载 作者:行者123 更新时间:2023-12-03 06:05:16 25 4
gpt4 key购买 nike

我正在关注 ruby​​onrails.org 上的截屏视频(创建博客)。

我有以下型号:

评论.rb

class Comment < ActiveRecord::Base
belongs_to :post
validates_presence_of :body # I added this
end

post.rb

class Post < ActiveRecord::Base
validates_presence_of :body, :title
has_many :comments
end

模型之间的关系工作正常,除了一件事 - 当我删除帖子记录时,我希望 RoR 删除所有相关的评论记录。据我所知,ActiveRecords 是独立于数据库的,因此没有内置方法来创建外键、关系、ON DELETE、ON UPDATE 语句。那么,有什么办法可以做到这一点(也许RoR本身可以删除相关评论?)?

最佳答案

是的。在 Rails 的模型关联中,您可以指定 :dependent 选项,该选项可以采用以下三种形式之一:

  • :destroy/:destroy_all 通过调用其 destroy 方法,关联的对象将与该对象一起销毁
  • :delete/:delete_all 所有关联对象都会立即销毁,而无需调用其 :destroy 方法
  • :nullify 所有关联对象的外键均设置为 NULL,而不调用其 save 回调

请注意,如果设置了 :has_many X, :through => Y 关联,则 :dependent 选项将被忽略。

因此,对于您的示例,您可以选择在删除帖子本身时让帖子删除所有关联的评论,而不调用每个评论的 destroy 方法。看起来像这样:

class Post < ActiveRecord::Base
validates_presence_of :body, :title
has_many :comments, :dependent => :delete_all
end

Rails 4 更新:

在 Rails 4 中,您应该使用 :destroy 而不是 :destroy_all

如果您使用 :destroy_all,您将收到异常:

The :dependent option must be one of [:destroy, :delete_all, :nullify, :restrict_with_error, :restrict_with_exception]

关于ruby-on-rails - Ruby ActiveRecord 模型中的级联删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1896777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com