私の Create コントローラーは、フォームに入力したばかりの値を渡す代わりに、ネストされたリソースの子の for を null として渡します。
これが私のコードです
ルート:
resources :trips do
resources :pilgrims
end
モデル:
旅行:
class Trip < ActiveRecord::Base
has_many :pilgrims
accepts_nested_attributes_for :pilgrims, :allow_destroy => true
attr_accessible :end_date, :leader_id, :name, :start_date, :pilgrim_attributes
end
巡礼者:
class Pilgrim < ActiveRecord::Base
belongs_to :trip
attr_accessible :pilgrim_id, :surname, :name, :middle, :aka, :prefix, :address, :city, :state, :zip, :email, :telephone, :nationality, :date_of_birth, :passport_number, :expiration, :jordan, :room, :price, :status, :trip_id
end
私の巡礼者のコントローラー:
def new
@trip = Trip.find(params[:trip_id])
@pilgrim = Pilgrim.new
end
def create
@trip = Trip.find(params[:trip_id])
@pilgrim = @trip.pilgrims.build(params[:pilgrim])
if @pilgrim.save
flash[:notice] = "The <b>#{ @pilgrim.name }</b> has been created successfully."
redirect_to(trip_pilgrims_path, :notice => "The <b>#{ @pilgrim.name }</b> ship has been saved successfully.")
else
render(:new, :error => @pilgrim.errors)
end
end
フォームコードを使用して Gist にリンクする
ルートは正しいようです。new_trip_pilgrim_path(@trip) をクリックすると、trips/:trip_id/pilgrims/new を指し、新しい巡礼者フォームが読み込まれます。
ただし、フォームで保存をクリックすると、ルート trips/3/pilgrims にリダイレクトされますが、必要なフィールドがすべて空白のままになっているという新しい巡礼者フォームが表示されます。
これは、ログに表示されるものです。
Started POST "/trips/3/pilgrims" for 127.0.0.1 at 2013-01-19 22:12:06 -0800
Processing by PilgrimsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"kOE06m3DNax43BOLYZ6t1lS7/T4wOWb2xM8m/mlQzvA=", "commit"=>"Create Pilgrim", "trip_id"=>"3"}
Trip Load (0.3ms) SELECT `trips`.* FROM `trips` WHERE `trips`.`id` = 3 LIMIT 1
(0.2ms) BEGIN
(0.2ms) ROLLBACK
Pilgrim Load (0.4ms) SELECT `pilgrims`.* FROM `pilgrims` WHERE `pilgrims`.`trip_id` = 3
Rendered pilgrims/_form.html.erb (36.4ms)
Rendered pilgrims/new.html.erb within layouts/application (37.2ms)
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1
Trip Load (0.3ms) SELECT `trips`.* FROM `trips`
Completed 200 OK in 244ms (Views: 102.5ms | ActiveRecord: 11.2ms)
Pilgrim 作成コントローラーで何が起こっているのですか?