Rails ActiveModel::ForbiddenAttributesError Редактирование нескольких записей

Я следил за Эпизодом 165 Railscast (исправленным) до первого о том, как редактировать и обновлять несколько записей в одной форме. Но когда я отправляю свою форму для одновременного редактирования нескольких записей, я получаю:

ActiveModel::ForbiddenAttributesError

Для этой строки:

product.update_attributes(params[:product].reject { |k,v| v.blank? })

Параметры:

Параметры:

{"utf8"=>"✓",
 "_method"=>"put",
 "authenticity_token"=>"g5C2siF5GcWfPxhph4utWn8JBs2JXEpIUBDO6OlFyQQ=",
 "product_ids"=>["11142",
 "11143"],
 "product"=>{"user_id"=>"",
 "allow_multi_users"=>"true",
 "state_id"=>"",
 "site"=>"",
 "department"=>"",
 "room"=>"",
 "asset_type_id"=>"",
 "asset_model_id"=>"",
 "sync_with_jss"=>"",
 "carrier_id"=>"",
 "mobile_contract_req_date"=>"",
 "mobile_contract_end_date"=>"",
 "mobile_international_plan"=>"",
 "mobile_tethering"=>"",
 "mobile_account"=>""},
 "commit"=>"Update"}`

Обычно я думаю, что это связано с тем, что я не разрешил атрибут в сильных параметрах. Но это не атрибут, это параметры формы, которые содержат все значения.

Это для моей модели Products.rb, так что не должен ли он уже принимать params[:product]?

products_controller.rb

private  
  def product_params
    params.require(:product).permit(:mobile_account, :mobile_international_plan, :mobile_tethering, :mobile_contract_end_date.. )
  end

Использование Rails 4.0.0


person Devin    schedule 06.11.2014    source источник
comment
пожалуйста, попробуйте добавить значение puts params[:product] к вашему вопросу.   -  person mohameddiaa27    schedule 07.11.2014
comment
Я добавил вывод параметров во время ошибки.   -  person Devin    schedule 07.11.2014


Ответы (1)


Попробуй это

def update
  ...
  product.update_attributes(product_params)
  ...
end

private

  def product_params
    params.require(:product).permit(:mobile_account, :mobile_international_plan, :mobile_tethering, :mobile_contract_end_date.. )
  end

Список полей — это те поля, которые вы ожидаете от своего пользователя для обновления или создания.

Дополнительную информацию можно найти здесь

Ошибка ActiveModel::ForbiddenAttributesError возникает, когда вы пытаетесь обновить модель с помощью объекта params с параметрами, которые не были разрешены, все поля, присутствующие в форме, должны быть разрешены для обновления записи.

person Alejandro Babio    schedule 06.11.2014
comment
Затем вы должны вызвать update_attributes с product_params - person Alejandro Babio; 07.11.2014
comment
Вот это да. Конечно! Это имеет смысл, и я не видел этого. Спасибо. - person Devin; 07.11.2014