Рельсы: внесение в белый список нескольких объектов
У меня есть форма для заказа, содержащая продукты (идентификатор, количество), которые добавляются динамически формы: <% = form_for (заказ) do | f | %>
<div class="field">
<%= f.label :note %>
<%= f.text_field :note %>
</div>
<div class="field">
<% Product.all.collect {|x| [x.name, x.id]}.each do |c| -%>
<%= label_tag(name=c.first) %>
<%= number_field_tag( 'products[][:qty]','',min:1) %>
<%= hidden_field_tag( 'products[][:id]',c.last) %>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
и полученные параметры выглядят так:
{"order"=>{"note"=>"mm","user_id"=>"mm"}, "products"=>[{":qty"=>"2",":id"=>"1"}, {":qty"=>"2", ":id"=>"2"}]}
Как разрешить эти параметры, я попробовал это, но не сработало:
params.require(:order).permit(:note)
params.permit(:products => [])
1 ответ
Было бы лучше переделать вашу форму, чтобы она включала продукты в том порядке, в котором они логически принадлежат (отрывок оставлен читателю), и возвращают такие параметры, как
{"order"=>{"note"=>"mm","user_id"=>"mm", "products"=>[{":qty"=>"2",":id"=>"1"}, {":qty"=>"2", ":id"=>"2"}]}}
Чем вы можете легко это сделать
order_params = params.require(:order).permit(:note, :products => [:qty, :id])
и для удобства вы можете извлечь такие продукты (но это не нужно)
products_params = params.delete("products")