strong_params удаление идентификатора acceptpts_nested_attributes_for моделей

У меня есть следующее заявление strong_params:

  def product_grid_params
    params.require(:product_grid).permit(:name,
      product_grid_locations_attributes: [:id, :grid_index, :item_id, :item_type, :short_name, :long_name]
    ).merge({ venue_id: params[:venue_id] })
  end

Но мои params и product_grid_params выглядят так:

(byebug) params
{"product_grid"=>{"product_grid_locations_attributes"=>[{"id"=>"5560d1f7a15a416719000007", "short_name"=>"shrt", "long_name"=>"Whiskey Ginger", "grid_index"=>73, "item_type"=>"product", "item_id"=>"9b97aa28-1349-4f60-a359-3907c8ac9a74"}]}, "id"=>"5560d1f7a15a416719000006", "venue_id"=>"5560d1f7a15a416719000005", "format"=>"json", "controller"=>"api/v2/manager/product_grids", "action"=>"update"}
(byebug) product_grid_params
{"product_grid_locations_attributes"=>[{"grid_index"=>73, "item_id"=>"9b97aa28-1349-4f60-a359-3907c8ac9a74", "item_type"=>"product", "short_name"=>"shrt", "long_name"=>"Whiskey Ginger"}], "venue_id"=>"5560d1f7a15a416719000005"}

Вы заметите, что в параметрах product_grid_locationИдентификатор присутствует, но он отфильтрован в product_grid_params. Что дает? Мне нужен этот идентификатор для обновления вложенных атрибутов.

1 ответ

Решение

Похоже, это было из-за проблемы с Mongoid. Идентификатор, который я передавал, был Moped::BSON::ObjectId, который strong_params отказался анализировать. Я преобразовал его в строку, и все было хорошо после этого:

params[:product_grid][:product_grid_locations_attributes].each { |location| location[:id] = location[:id].to_str }
Другие вопросы по тегам