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