我有一个订单表单,其中包含动态添加的产品(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 => [])
答案 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")