如何删除Rails3中的嵌套对象?

时间:2011-03-23 00:36:39

标签: ruby-on-rails ruby-on-rails-3 nested-forms

如何删除表单中的嵌套对象?我发现我需要在:allow_destroy指令的父模型中添加accepts_nested_attributes_for

此外,我想限制删除。如果父对象是唯一保留关联的对象,则只应删除嵌套对象。

示例:

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

class Company < ActiveRecord::Base
  has_many :internships
end

说明:公司可以举办许多实习。因此,只要至少有一个与之相关的实习,我不想删除公司记录。

2 个答案:

答案 0 :(得分:2)

您可以使用dependent =&gt; :破坏

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

答案 1 :(得分:1)

如果在before_destroy过滤器中返回false,则将阻止destroy操作。因此,我们可以检查是否有与公司相关的实习,如果有,则阻止它。这是在公司模型中完成的。

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