开发者

How to delete nested objects in Rails3?

开发者 https://www.devze.com 2023-02-19 15:44 出处:网络
How can I delete nested objects in a form? I found out that I need to add :allow_destroy in the parent model at the accepts_nested_attributes_for directive.

How can I delete nested objects in a form? I found out that I need to add :allow_destroy in the parent model at the accepts_nested_attributes_for directive.

Further, I want to restrict the deletion. A nested object only should be deleted, if the parent object is the only one that retains the association.

Example:

class Internship < ActiveRecord::Base
  belongs_to :company
  accepts_nested_attributes_for :company, allow_destroy => true
end

class Company < ActiveRecord::Base
  开发者_运维百科has_many :internships
end

Explanation: A company can host many internships. Therefore, I do not want to delete the company record as long as there is at least one other internship associated with it.


You could use dependent => :destroy

class Internship < ActiveRecord::Base
  belongs_to :company
  accepts_nested_attributes_for :company, allow_destroy => true
end

class Company < ActiveRecord::Base
  has_many :internships, :dependent => :destroy
end


If you return false in a before_destroy filter, then the destroy action will be blocked. So we can check to see if there are any internships associated to the company, and block it if so. This is done in the company model.

class Company < ActiveRecord::Base
  has_many :internships

  before_destroy :ensure_no_internships

  private

    def ensure_no_internships
      return false if self.internships.count > 0
    end

end    
0

精彩评论

暂无评论...
验证码 换一张
取 消