我在rubyonrails.org上跟踪了视频(创建博客)。
我有以下模型:
comment.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
型
模型之间的关系工作正常,除了一件事-当我删除一个post记录时,我希望RoR删除所有相关的评论记录。我知道ActiveRecords是独立于数据库的,所以没有内置的方法来创建外键,关系,ON_REPORT,ON_UPDATE语句。那么,有什么方法可以完成这一点吗(也许RoR本身可以负责删除相关的评论?)?
1条答案
按热度按时间zbq4xfa01#
可以。在Rails的模型关联中,您可以指定
:dependent
选项,它可以采用以下三种形式之一::destroy/:destroy_all
通过调用关联对象的destroy
方法,关联对象将与此对象一起销毁:delete/:delete_all
所有关联对象立即销毁,而不调用其:destroy
方法:nullify
所有关联对象的外键都设置为NULL
,而不调用其save
回调请注意,如果设置了
:has_many X, :through => Y
关联,则:dependent
选项将被忽略。因此,对于您的示例,您可以选择在帖子本身被删除时删除所有与其关联的评论,而不调用每个评论的
destroy
方法。这看起来像这样:字符串
Rails 4更新:
在Rails 4中,您应该使用
:destroy
而不是:destroy_all
。如果你使用
:destroy_all
,你会得到一个异常::dependent选项必须是[:destroy,:delete_all,:nulify,:restrict_with_error,:restrict_with_exception]之一