我正在使用Rails 3.2实现一个简单的航班系统 但是当我想要保存订单时,我有一个问题,可能有很多乘客。也就是说,他们两个是一对多的关系。 这是乘客的模型。
class Passenger < ActiveRecord::Base
attr_accessible :accident_number, :cred_number, :cred_type, :delay_number, :name, :order_id
validates :cred_type, :cred_number, :name, presence: true
belongs_to :order, :inverse_of => :passengers
end
这是Order的型号
class Order < ActiveRecord::Base
attr_accessible :contact_email, :contact_name, :contact_phone, :flight_id, :print_time, :remark
validates :contact_email, :contact_name, :contact_phone, :flight_id, :print_time, presence: true
belongs_to :flight
has_many :passengers, :dependent => :destroy, :inverse_of => :order
accepts_nested_attributes_for :passengers, :allow_destroy => true
attr_accessible :passengers_attributes, :allow_destroy => true
end
params就像这样
Parameters: {
"passengers"=>{"new_1"=>{"name"=>"Passenger 1", "cred_type"=>"ID card",
"cred_number"=>"12345", "accident_number"=>"1", "delay_number"=>"1"},
"new_2"=>{"name"=>"Passenger 2", "cred_type"=>"ID card", "cred_number"=>"54321", "accident_number"=>"1", "delay_number"=>"1"}},
"order"=>{"contact_name"=>"Contact 1", "contact_phone"=>"123456", "contact_email"=>"test2@tset,com", "print_time"=>"1", "remark"=>""},
"commit"=>"Create Order"}
问题在于订单,乘客无法得到保存。 我尝试了一些方法,但他们无法解决它......例如
def create
@order = Order.new(params[:order])
respond_to do |format|
if @order.save
params[:passengers].each do |k, v|
@order.passengers.create(v)
end
提前感谢!!
答案 0 :(得分:0)
我认为如果您的params在订单哈希中有乘客收集,您可以简单地执行以下操作来保存:
def create
@order = Order.new(params[:order])
respond_to do |format|
if @order.save
/ something else
end
end
end
如果您的关系设置正确,则不需要自己保存子对象。
答案 1 :(得分:0)
使用accepts_nested_attributes_for应该使用密钥:passengers_attributes
返回Order params中的乘客参数。
您需要在:passengers_attributes
电话中添加attr_accessible
,并查看您的表单奇怪地格式化params散列的原因。您可以发布表单的视图代码吗?