Рельсы: внесение в белый список нескольких объектов

У меня есть форма для заказа, содержащая продукты (идентификатор, количество), которые добавляются динамически формы: <% = 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")
Другие вопросы по тегам