我有2个模型Order和Item,它们之间的关系是Order has_many:items和item belongs_to order。
我想为该订单创建一个订单和多个商品。当用户第一次提交表单时,它应该创建一个订单。下次(因为我使用远程),当他点击提交时只更改 ITEM 的字段(我清除了js文件中字段的表单详细信息保存字段订单相同),应该创建该订单的新项目。
我的查看文件如下所示
<%= form_for @order, remote: true do |f| %>
<% if @order.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@order.errors.count, "error") %> prohibited this order from being saved:</h2>
<ul>
<% @order.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.label :from %>
<%= f.text_field :from %>
<%= f.label :to %>
<%= f.text_field :to %>
<%= f.label :shift_date %><br>
<%= f.datetime_select :shift_date %>
<h5> Item </h5>
<%= f.fields_for :items do |item| %>
<%= item.label :name %>
<%= item.text_field :name %>
<%= item.label :size %>
<%= item.text_field :size %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<div id= "addeditems">
<%= render @items %>
<div>
这成功保存了订单和商品。但下次它会创建另一个订单。我怎样才能使用相同的订单。
我试过了
@order = Order.find_initialize_by_id(params['id'])
在订单的创建动作中。但它没有按我的意愿工作。
甚至可以做我打算做的事情。如果是,我该如何实现?
答案 0 :(得分:0)
我在订单控制器的创建操作中尝试了以下操作并且它工作正常。如果有人有更好的解决方案,请告诉我。
def create
if session[:order_id]
@order = Order.find(session[:order_id])
@order.update_attributes(item_params)
else
@order = Order.new(order_params)
@order.save
end
session[:order_id] = @order.id
respond_to do |format|
format.html { root_path, notice: 'Order was successfully created.' }
format.js { }
end
end
def item_params
params.require(:order).permit(:items_attributes => [:name, :size])
end