作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在关注 rubyonrails.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 中,您应该使用 :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/
我是一名优秀的程序员,十分优秀!