Rails form_for仅提交最后一个输入

时间:2018-05-15 16:14:26

标签: ruby-on-rails ruby forms form-for

我试图通过循环每个产品来创建输入,并为所有输入提供一个表单提交。目前,表单仅提交最后一个输入。我将如何制作以便所有输入都被提交?

<%= 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 %>

2 个答案:

答案 0 :(得分:0)

我不知道你的用例,但你可以使用gem cocoon来做到这一点。还会有一个添加/删除其他产品的链接。

https://github.com/nathanvda/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"... }),但是这个示例是为了显示每个隐藏字段如何需要一个唯一键。
您可以更好地定义参数,以便在控制器中使用它们,只需保持它们的唯一性。