У меня есть следующий фрагмент кода, который отлично работает с 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 для сохранения таких значений ассоциации?
благодаря.