[英]Iteration in Rails form_for is adding all instances of model on create
I have an Order
and Items
, with join table OrderItems
that act as line items in an order. 我有一个Order
和Items
,连接表OrderItems
充当订单中的订单项。 In order#show
, I want to display all instances of Items
and be able to add this to the order through creating a new OrderItem
. 在order#show
,我想要显示Items
所有实例,并能够通过创建新的OrderItem
将其添加到订单中。 The issue is that when I post the form, order_item#create
makes 40 new order_items
for all Items
, instead of just creating one instance of OrderItem
for that one item I want to add. 问题是,当我发布表单时, order_item#create
为所有Items
order_item#create
40个新的order_items
,而不仅仅是为我要添加的一项创建OrderItem
一个实例。
Here is the OrderItems
controller: 这是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
Here is the form in order#show
这是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 %>
Actually, the order_item#create
action isn't creating the 40 order_items
. 实际上, order_item#create
操作不是创建40个order_items
。 It's your form: 这是您的表格:
<%= form_for [@user, @order, @order.order_items.create(:item_id => item.id)] do |f| %>
Change the create
to build
and that way it won't save the 40 instances. 将create
更改为build
,这样就不会保存40个实例。 It will only save the one you hit submit for. 它只会保存您点击提交的那一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.