【问题标题】:rails : whitelisting multiple objectrails :将多个对象列入白名单
【发布时间】:2017-05-03 18:24:53
【问题描述】:

我有一个订单表格,其中包含动态添加的产品(id、数量) 形式:

  <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 => [])

【问题讨论】:

    标签: ruby-on-rails strong-parameters


    【解决方案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")
    

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 2016-09-17
      • 1970-01-01
      • 2021-12-08
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      相关资源
      最近更新 更多