Ruby on Rails:嵌套属性,创建模型及其嵌套属性使用主模型使用远程创建更多嵌套属性模型

时间:2014-11-19 18:41:38

标签: ruby-on-rails-4 nested-forms nested-attributes

我有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']) 

在订单的创建动作中。但它没有按我的意愿工作。

甚至可以做我打算做的事情。如果是,我该如何实现?

1 个答案:

答案 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