繁体   English   中英

Rails中的form_for迭代在创建时添加了模型的所有实例

[英]Iteration in Rails form_for is adding all instances of model on create

我有一个OrderItems ,连接表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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM