2012-06-14 8 views
9

を表示していない:レールフォームfields_forにhas_oneアソシエーションは、私が会議のモデルを持っている

class Meeting < ActiveRecord::Base 
    has_one :location, :class_name => "MeetingLocation", :dependent => :destroy 
    accepts_nested_attributes_for :location 

は、その後、私はMeetingLocationモデルを持っている:

class MeetingLocation < ActiveRecord::Base 
    belongs_to :meeting 

私の新しい会議形式:

<%= form_for @meeting do |f| %> 
    <%= f.label :location %> 
    <%= fields_for :location do |l| %> 
    Name <%= l.text_field :name %> 
    Street <%= l.text_field :street %> 
    City <%= l.text_field :city, :class => "span2" %> 
    State <%= l.select :state, us_states, :class => "span1" %> 
    Zipcode <%= l.text_field :zip, :class => "span1" %> 
    <% end %> 

私は新しいミーティングフォームを見て、場所のフィールドは空白です!ロケーションラベルは表示されますが、他のロケーションフィールドは表示されません。私は過去3時間の説明を探していて、似たような問題はあるが運がないということを発見した。

ありがとうございました。

+0

fields_forを変更してみてください場所は自動的に作成されないため、{"name" => "sdsds"、 "street" => "sdsdsds"、..}のようになりますが、新しい会議が作成されます。 – absolutskyy

答えて

17

場所フィールドが表示されない理由は、@meeting = Meeting.newで新しい会議を作成すると、この会議にまだ関連付けられているMeetingLocationがないことです。 @ meeting.locationを呼び出すと、nilが返されます。このため、フォームには場所のフィールドが表示されません。

これを修正するには、新しい会議を作成した後に@meeting.build_locationに電話する必要があります。それは空白の場所に新しい会議を関連付けます。

編集:私は私のブラウザを再起動し、今私は、フォームを送信の代わりに、URLに「location_attributes」を表示するときfields..butは今、それは、「場所」=>は参照f.fields_for

+0

ありがとうございますが、私はブラウザを再起動してサーバを再起動した後にフィールドが表示されたと言っていました。今私の問題は、私が会議を保存するとき、その場所が自動的に期待どおりに保存されないということです。 paramsの私の場所は "location_attributes"とは言わないのでヒントはURLにあると思います。 – absolutskyy

+0

私のEDITの変更によって問題が解決されるかどうかを確認してください。 – cdesrosiers

+0

はい、両方の組み合わせが機能しました。 1)f.fields_forを追加しました2)@ meeting.build_locationを追加しました。ありがとうたくさんのcdesrosiers – absolutskyy

関連する問題