如何删除表单中的嵌套对象?我发现我需要在: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
说明:公司可以举办许多实习。因此,只要至少有一个与之相关的实习,我不想删除公司记录。
答案 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