Rails 4.2 сохраняет идентификаторы ассоциации has_and_belongs_to_many

У меня есть следующий фрагмент кода, который отлично работает с Rails 4.1 с драгоценным камнем protected_attributes (я еще не переместил свой код в 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, поэтому он отлично работал при сохранении формы сотрудника. (Примечание: для этого даже не требуется accepts_nested_attributes_for :skills, установленный в модели сотрудника)

Рельсы 4.2

Я нахожусь в процессе переноса своего кода на Rails 4.2 и перехода к сильным параметрам.

Я внес в белый список 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

Но это просто не обновило бы идентификаторы навыков для сотрудников.

Может кто-нибудь указать мне, что изменилось в Rails 4.2 для сохранения таких значений ассоциации?

благодаря.


person thanikkal    schedule 11.07.2015    source источник


Ответы (1)


Проблема заключалась в том, как я внес в белый список параметр. Он должен быть внесен в белый список как параметр массива, например:

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