VehiculoとPolizaの2つのモデルを扱うフォームがあります。これが私が今それらを設定する方法です:
class Vehiculo < ActiveRecord::Base
has_one :poliza
end
class Poliza < ActiveRecord::Base
belongs_to :vehiculo
end
Vehiculoのcreateメソッドは次のようになります。
def create
@vehiculo = Vehiculo.new(params[:vehiculo])
@polizadeseguro = Polizadeseguro.new(params[:poliza])
respond_to do |format|
if @vehiculo.save #&& @poliza.save
format.html { redirect_to(@vehiculo, :notice => 'Vehiculo was successfully created.') }
format.xml { render :xml => @vehiculo, :status => :created, :location => @vehiculo }
else
format.html { render :action => "new" }
format.xml { render :xml => @vehiculo.errors, :status => :unprocessable_entity }
end
end
/ vehiculos / newのフォームには、polizaのフィールドを含む@fields_for部分があります。フォームを送信すると、すべてのフィールドが保存されますが、作成したばかりのIDがvehiculoからPolizasテーブルのvehiculo_idに割り当てられていません。これに関する多くの質問をオンラインで読んだ後、モデルの関係に基づいて「自動的に」保存する必要があるようです。これは本当ですか?もしそうなら、なぜそれが機能しないのですか?そうでない場合は、createメソッドに何を追加する必要があるので、これを解決しますか?
ありがとう!
更新:ここで提案されているように、出力としてjsonを使用してcreateメソッドを更新した後、次のようになります。
{
"utf8"=>"✓",
"authenticity_token"=>"tEhNC4J17h+KvNgXv1LLkVyufQwU2uAT18P7msQxiqA=",
"vehiculo"=>{
"marca_id"=>"2",
"modelo_id"=>"4",
"color"=>"Blanco",
"ano"=>"2011",
"chassis"=>"123456789",
"placa"=>"G123456",
"cliente_id"=>"1",
"entaller"=>"0",
"vip"=>"0"
},
"poliza"=>{
"compania"=>"Comp1",
"numeropoliza"=>"736458",
"vencimiento(1i)"=>"2011",
"vencimiento(2i)"=>"9",
"vencimiento(3i)"=>"21"
}
}
これが出力なので、少なくともフォームからフィールドを取得していますが、それらをpolizasテーブルに挿入していません。