删除嵌套属性不起作用

Jef*_*eff 3 ruby-on-rails ruby-on-rails-4

我似乎无法使用accepts_nested_attributes_for命令删除项目,但我已根据本教程和相关的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
Run Code Online (Sandbox Code Playgroud)

以我的Job形式,我有......

<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove Specialty" %>
Run Code Online (Sandbox Code Playgroud)

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

在2013-07-16 16:15:16 -0400开始为127.0.0.1启动PATCH"/ jobs/1"

由JobsController处理#update为HTML

参数:{"utf8"=>"✓","authenticity_token"=>"8VxYXujcKXpLEm8 + 7B43SLU6X3fH00kIOmFK + nvaBKs =","job"=> {"name"=>"Cook","description"=>"制作食物.","specialties_attributes"=> {"2"=> {"name"=>"","description"=>"","_ destroy"=>"1","id"=>"3"}, "3"=> {"name"=>"","description"=>"","_ destroy"=>"1","id"=>"4"}}},"commit"=>"更新工作","id"=>"1"}

作业加载(0.1ms)选择"作业".*FROM"作业"WHERE"作业"."id"=?限制1 [["id","1"]]

未允许的参数:_destroy

未允许的参数:_destroy

未允许的参数:_destroy

未允许的参数:_destroy

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

Dam*_*che 14

这是因为strong_parameters.你现在必须要permit钥匙.在你的行动中:

params.permit(:_destroy)

  • 在side job_controller.rb> def job_params params.require(:job).permit(:id,:description,:specialty_fields_attributes => [:id,:job_id,:avatar,:_ destroy])结束 (2认同)

SSR*_*SSR 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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我绝对不想把`:_destroy`放到我的子属性数组中! (3认同)