Rails form_for только для отправки последнего ввода - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь создать входные данные, зацикливая каждый продукт и получая одну форму для всех входных данных. В настоящее время форма предоставляет только последний вход. Как бы я сделал так, чтобы все входные данные были представлены?

<%= 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 голосов
/ 15 мая 2018

Вы можете выполнить итерацию с помощью 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"... }), но это для примера, чтобы показать, как каждому скрытому полю нужен уникальный ключ.
Вы можете лучше определить свои параметры, чтобы использовать их в контроллере, просто оставьте их уникальными.

0 голосов
/ 15 мая 2018

Я не знаю ваш вариант использования, но вы можете использовать драгоценный кокон для этого.Также будет ссылка для добавления / удаления другого продукта.

https://github.com/nathanvda/cocoon

...