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