J'ai un Order
et Items
, avec la table de jointure OrderItems
qui agissent comme des éléments de campagne dans un ordre. Dans order#show
, je veux afficher toutes les instances de Items
et être en mesure d'ajouter à la commande en créant un nouveau OrderItem
. Le problème est que lorsque je publie le formulaire, order_item#create
fait 40 nouveau order_items
pour tous Items
, au lieu de créer simplement une instance de OrderItem
pour ce seul élément que je veux ajouter.Itération dans les rails form_for ajoute toutes les instances de modèle sur créer
Voici le contrôleur OrderItems
:
def create
@order_item = @order.order_items.build(order_item_params)
if @order_item.save
flash[:notice] = "Your item was added"
redirect_to [@user, @order]
else
flash[:error] = "Your item was not added. Please try again."
redirect_to [@user, @order]
end
end
Voici la forme order#show
<% @items.each do |item| %>
<div>
<%= form_for [@user, @order, @order.order_items.create(:item_id => item.id)] do |f| %>
<div class="form-group">
<%= f.label item.name %>
<%= f.label "$#{item.price.to_s}" %>
</div>
<div class="form-group">
<%= f.label 'quantity' %>
<%= f.text_area :quantity %>
</div>
<div class="form-group">
<%= f.label 'item id' %>
<%= f.text_area :item_id %>
</div>
<div class="form-group">
<%= f.submit 'Add Item', class: 'btn' %>
</div>
<% end %>
</div>
<% end %>
Réponse parfaite! –