为什么我的嵌套属性与父级一起被销毁?

时间:2014-12-02 05:08:53

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个简历模型has_many:技能,以及我的技能模型belongs_to:resume。

我在简历表格中嵌套技能表格,它正在创造完美的记录和关系。但是当我试图销毁简历时,相关的技能不会随之被破坏。

以下是我的模特:

# Resume.rb

class Resume < ActiveRecord::Base
  has_many :skills

  belongs_to :user

  accepts_nested_attributes_for :skills, allow_destroy: true
end 


# Skill.rb

class Skill < ActiveRecord::Base
  belongs_to :resume
end

这是resume_controller.rb

中的强力参数
def resume_params
  params.require(:resume).permit(:user_id, :title, :summary, :job_title, skills_attributes [:skill_name, :_destroy])
end

据我所知,我正在正确传递_destroy密钥。我注意到有些人在表单中有_destroy复选框。我希望在销毁整个简历时删除技能。谢谢!

2 个答案:

答案 0 :(得分:2)

你所指明的只是你可以在简历中破坏技能,就像你在一些例子中提到的复选框一样。如果您希望它破坏简历销毁时所有相关技能,您可以调整has_many声明。

has_many :skills, dependent: :destroy

答案 1 :(得分:2)

在您的:dependent => :destroy模型中添加Resume,如下所示:

class Resume < ActiveRecord::Base
  has_many :skills, :dependent => :destroy

  belongs_to :user

  accepts_nested_attributes_for :skills, allow_destroy: true
end 

:dependent 控制关联对象在其所有者销毁时会发生什么:

  • :destroy导致所有相关对象也被销毁

  • :delete_all导致所有关联对象直接从数据库中删除(因此回调将不会执行)

  • :nullify会将外键设置为NULL。回调不会被执行。

  • 如果有任何关联记录,
  • :restrict_with_exception会引发异常

  • 如果有任何关联对象,
  • :restrict_with_error会导致错误添加到所有者