Rails 4.2保存has_and_belongs_to_many关联ID

时间:2015-07-11 02:46:12

标签: ruby-on-rails nested-forms has-and-belongs-to-many ruby-on-rails-4.2

我有以下一些代码可以正常使用带有protected_attributes gem的Rails 4.1(我还没有将我的代码移到strong_parameters)

模型/ employee.rb

class Employee

   has_and_belongs_to_many :skills

   attr_accessible :skill_ids, ...

end

模型/ skill.rb

class Skill
  has_and_belongs_to_many :employees
end

我在更新员工时将技能绑定到员工,因此我的视图如下所示

的观点/雇员/ _form.html.erb

 <%= form_for @employee,  do |f| %>
.....

  <%= f.collection_select :skill_ids, Skill.all, :id, :name, {}, 
    {:multiple => true, class: 'select2 '} %>
......
<% end %>

skill_ids是attr_accessible params的一部分,因此在保存员工表单时效果很好。 (注意:这甚至不需要accepted_nested_attributes_for:在员工模型中设置的技能)

Rails 4.2

我正在将代码迁移到Rails 4.2并转移到强参数。

我已在白名单中列出了employees控制器中的skill_ids,并在更新操作上调用了它,如下所示:

控制器/ employee_controller.rb

def update
  @employee = Employee.find(params[:id])
  @employee.update_attributes(employee_params)
end

private 
def employee_params
  params.require(:employee).permit(:skill_ids, .....)
end

但它不会更新员工的技能ID。

有人可以指出我在Rails 4.2中发生了哪些更改,以保存这些关联值?

感谢。

1 个答案:

答案 0 :(得分:6)

问题在于我如何将该参数列入白名单。它应该被列入白名单,如下所示:

 params.require(:employee).permit({:skill_ids => []}, .....)