Ruby on rails 4 RubyonRails:嵌套属性,创建一个模型,它的嵌套属性使用主模型来创建更多的嵌套属性模型

Ruby on rails 4 RubyonRails:嵌套属性,创建一个模型,它的嵌套属性使用主模型来创建更多的嵌套属性模型,ruby-on-rails-4,nested-forms,nested-attributes,Ruby On Rails 4,Nested Forms,Nested Attributes,我有两个模型订单和项目,它们之间的关系是订单有很多:项目和项目属于订单 我想为该订单创建一个订单和多个项目。用户首次提交表单时,应创建订单。下一次(因为我使用的是remote),当他单击submit时,只更改ITEM的字段(我正在清除js文件中ITEM的表单详细信息,保持字段订单不变),应该为该订单创建一个新项目 我的视图文件如下所示 <%= form_for @order, remote: true do |f| %> <% if @order.errors.any? %

我有两个模型订单和项目,它们之间的关系是订单有很多:项目和项目属于订单

我想为该订单创建一个订单和多个项目。用户首次提交表单时,应创建订单。下一次(因为我使用的是remote),当他单击submit时,只更改ITEM的字段(我正在清除js文件中ITEM的表单详细信息,保持字段订单不变),应该为该订单创建一个新项目

我的视图文件如下所示

<%= 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 controller的创建操作中尝试了以下操作,并且成功了。如果有更好的解决方案,请告诉我

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