删除嵌套属性不起作用

时间:2013-07-16 20:34:23

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

我似乎无法使用accepts_nested_attributes_for命令删除项目,但我已根据this tutorial和相关的git repo执行此操作。我的模特是......

class Job < ActiveRecord::Base
    has_many :specialties, :inverse_of => :job
    accepts_nested_attributes_for :specialties, allow_destroy: true, :reject_if => :all_blank
end

class Specialty < ActiveRecord::Base
    belongs_to :job, :inverse_of => :specialties
end

Job表单中,我有...

<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove Specialty" %>

当我点击复选框删除几个specialties时,没有任何反应。我检查了服务器输出并收到了:

  

在2013-07-16 16:15:16 -0400为127.0.0.1启动PATCH“/ jobs / 1”

     

由JobsController处理#update为HTML

     

参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“8VxYXujcKXpLEm8 + 7B43SLU6X3fH00kIOmFK + nvaBKs =”,“job”=&gt; {“name”=&gt;“Cook”,“description “=&gt;”制作食物。“,”specialties_attributes“=&gt; {”2“=&gt; {”name“=&gt;”“,”description“=&gt;”“,”_ destroy“=&gt;” 1“,”id“=&gt;”3“},”3“=&gt; {”name“=&gt;”“,”description“=&gt;”“,”_ destroy“=&gt;”1“,” id“=&gt;”4“}}},”commit“=&gt;”更新作业“,”id“=&gt;”1“}

     

作业加载(0.1ms)选择“作业”。* FROM“作业”WHERE“作业”。“id”=? LIMIT 1 [[“id”,“1”]]

     

未经许可的参数:_destroy

     

未经许可的参数:_destroy

     

未经许可的参数:_destroy

     

未经许可的参数:_destroy

我错过了什么?我已经完成了教程和回购了很多次,我看不出去哪里了。

2 个答案:

答案 0 :(得分:13)

那是因为strong_parameters。您现在需要permit个密钥。在你的行动中:

params.permit(:_destroy)

答案 1 :(得分:12)

我喜欢@Damien Roche的答案,但它只是为了不与任何人混淆。按照这个

In job_controller.rb

private
 def job_params 
   params.require(:job).permit(:id, :description, :specialty_fields_attributes => [:id, :job_id, :avatar, :_destroy])
 end