[英]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.