0

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

これは注文のモデルです

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

そして、パラメータはこのようなものです

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

前もって感謝します!!

4

2 に答える 2

0

accepts_nested_attributes_forを使用すると、キーを使用してOrderパラメータ内の乗客パラメータが返されます:passengers_attributes

:passengers_attributes呼び出しに追加してattr_accessible、フォームがparamsハッシュを奇妙にフォーマットしている理由を確認する必要があります。フォームのビューコードを投稿できますか?

于 2012-08-20T17:16:25.960 に答える
0

あなたのパラメーターが注文ハッシュ内に乗客コレクションを持っていた場合、次のようにして保存するだけで済みます。

def create                              
  @order = Order.new(params[:order])    
  respond_to do |format|                
    if @order.save
      / something else
    end
  end
end

リレーションが正しく設定されていれば、子オブジェクトを個別に保存する必要はありません。

于 2012-08-20T17:10:45.013 に答える