我是rails的新手,我正在尝试使用accepts_nested_attributes_for函数。我正在创建库存系统,并且accepted_nested_attributes_for功能用于将多个订单详细信息附加到订单。订单还必须与商店位置相关联。
我遇到的问题是订单正在创建,但没有数据传递到订单明细表。
我的观点如下:
订单查看
<h1>Place An Order</h1>
<%= form_for ([@location, @order]) do |f| %>
<p>
<%= f.label :customer_id %><br />
<%= f.text_field :customer_id %>
</p>
<p>
<h3>Items</h3>
<%= f.fields_for :order_details do |builder| %>
<%= render 'order_detail_fields', :f => builder %>
<% end %>
</p>
<p><%= link_to_add_fields "Add Item", f, :order_details %></p>
<p>
<%= f.submit %>
</p>
<% end %>
Order_details_fields Partial
<p class="fields">
<%= f.label :item_id %><br />
<%= f.text_field :item_id %></br>
<%= f.label :quantity %></br>
<%= f.text_field :quantity %></br>
<%= f.label :cost %></br>
<%= f.text_field :cost %></br>
<%= f.label :discount %><br />
<%= f.text_field :discount %><br />
<%= f.hidden_field :_destroy %>
<%= link_to_function "remove", "remove_fields(this)" %>
</p>
订单控制器
class OrdersController < ApplicationController
def index
@orders = Order.all
end
def show
@order = Order.find(params[:id])
end
def new
@order = Order.new
@location = Location.find(params[:location_id])
end
def create
@location = Location.find(params[:location_id])
@order = @location.orders.create(order_params)
#@order = @order.order_details.create
if @order.save
redirect_to @order
else
render :action => 'new'
end
end
private
def order_params
params.require(:order).permit(:customer_id, order_detials_attributes: [:id, :item_id, :quantity, :cost, :discount])
end
end
订单型号
class Order < ActiveRecord::Base
belongs_to :location
has_many :order_details, :dependent => :destroy
accepts_nested_attributes_for :order_details, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end
订单明细模式
class OrderDetail < ActiveRecord::Base
belongs_to :order
end
路线
resources :locations do
resources :orders
end
resources :orders do
resources :order_details
end
非常感谢任何帮助
答案 0 :(得分:0)
<强>构建强>
看起来一切对我来说都是正确的 - 问题@Pavan
概述的唯一问题是,当你使用accepts_nested_attributes_for
时,你必须build
关联对象,所以它可以使用以下形式:
#app/controllers/orders_controller.rb
Class OrdersController < ApplicationController
def new
@location = Location.find parmas[:id]
@order = Order.find params[:id]
@order.order_details.build
end
end
虽然这看起来像是唯一的问题,但可能存在其他问题(OrderDetail
模型上的验证作为示例(您没有)
我和Pavan建议的唯一问题是,如果您不构建关联数据,fields_for
不会在表单上显示。如果您的字段正在显示,则可能是另一个问题,该问题将在params
哈希