我试图通过循环每个产品来创建输入,并为所有输入提供一个表单提交。目前,表单仅提交最后一个输入。我将如何制作以便所有输入都被提交?
<%= form_for :inventory do |f| %>
<% @products.each do |product| %>
<tr>
<td><%= product.name %></td>
<td><%= product.measurement %></td>
<td><%= f.number_field :amount, class: 'form-control' %></td>
<%= f.hidden_field :product_id, :value => product.id %>
</tr>
<% end %>
<%= f.submit %>
<% end %>
答案 0 :(得分:0)
我不知道你的用例,但你可以使用gem cocoon来做到这一点。还会有一个添加/删除其他产品的链接。
答案 1 :(得分:0)
您可以使用each_with_index
进行迭代:
<%= form_for :inventory do |f| %>
<% @products.each_with_index do |product, i| %>
<tr>
<%= f.hidden_field "product_id[#{i}]", :value => product.id %>
</tr>
<% end %>
<%= f.submit %>
<% end %>
就像输出不是很优雅(类似"product_id"=>{"0"=>"1", "1"=>"2", "2"=>"3"... }
),但是这个示例是为了显示每个隐藏字段如何需要一个唯一键。
您可以更好地定义参数,以便在控制器中使用它们,只需保持它们的唯一性。