Cascade delete in Ruby ActiveRecord models?

后端 未结 1 1535
栀梦
栀梦 2020-12-14 15:02

I was following the screencast on rubyonrails.org (creating the blog).

I have following models:

comment.rb

class Comment < ActiveRecord::B         


        
相关标签:
1条回答
  • 2020-12-14 15:18

    Yes. On a Rails' model association you can specify the :dependent option, which can take one of the following three forms:

    • :destroy/:destroy_all The associated objects are destroyed alongside this object by calling their destroy method
    • :delete/:delete_all All associated objects are destroyed immediately without calling their :destroy method
    • :nullify All associated objects' foreign keys are set to NULL without calling their save callbacks

    Note that the :dependent option is ignored if you have a :has_many X, :through => Y association set up.

    So for your example you might choose to have a post delete all its associated comments when the post itself is deleted, without calling each comment's destroy method. That would look like this:

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

    Update for Rails 4:

    In Rails 4, you should use :destroy instead of :destroy_all.

    If you use :destroy_all, you'll get the exception:

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

    0 讨论(0)
提交回复
热议问题