rails:将多个对象列入白名单

时间:2017-05-03 18:24:54

标签: ruby-on-rails strong-parameters

我有一个订单表单,其中包含动态添加的产品(ID,数量) 形成:     <%= form_for(order)do | f | %GT;

  <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 个答案:

答案 0 :(得分:0)

重做表单更好,因此它按照逻辑上属于的顺序包含产品(练习留给读者)并返回类似

的参数
{"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")