[英]Iteration in Rails form_for is adding all instances of model on create
我有一個Order
和Items
,連接表OrderItems
充當訂單中的訂單項。 在order#show
,我想要顯示Items
所有實例,並能夠通過創建新的OrderItem
將其添加到訂單中。 問題是,當我發布表單時, order_item#create
為所有Items
order_item#create
40個新的order_items
,而不僅僅是為我要添加的一項創建OrderItem
一個實例。
這是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
這是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 %>
實際上, order_item#create
操作不是創建40個order_items
。 這是您的表格:
<%= form_for [@user, @order, @order.order_items.create(:item_id => item.id)] do |f| %>
將create
更改為build
,這樣就不會保存40個實例。 它只會保存您點擊提交的那一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.