2012-06-14 12 views
9

Anzeigen Ich habe ein Meeting Modell:Schienen has_one Verein fields_for Form nicht

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

Dann habe ich ein MeetingLocation Modell:

class MeetingLocation < ActiveRecord::Base 
    belongs_to :meeting 

Meine neue Treffen Form:

<%= 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 %> 

Wenn Ich sehe das neue Meeting-Formular, die Standortfelder sind leer! Ich sehe nur die Standortbezeichnung, aber keine anderen Standortfelder. Ich habe nach einer Erklärung für die letzten 3 Stunden gesucht, fand viele ähnliche Probleme, aber kein Glück.

Danke.

+0

ich meinen Browser zu ändern neu gestartet und ich sehe jetzt den fields..but jetzt, wenn Sie das Formular anstelle der Anzeige „location_attributes“ in der URL einreichen, es hat, „location“ => {"name" => "sdsds", "street" => "sdsdsds", ..}, wodurch der Standort nicht automatisch erstellt wird, sondern ein neues Meeting erstellt wird. – absolutskyy

Antwort

17

Der Grund dafür, dass die Standortfelder nicht angezeigt werden, besteht darin, dass beim Erstellen eines neuen Meetings mit @meeting = Meeting.new diesem Meeting noch kein MeetingLocation zugeordnet ist. Wenn Sie @ meeting.location aufrufen, erhalten Sie null. Aus diesem Grund zeigt das Formular keine Felder für den Standort an.

Um dies zu beheben, sollten Sie @meeting.build_location anrufen, nachdem Sie ein neues Meeting erstellt haben. Dadurch wird das neue Meeting mit einem leeren Speicherort verknüpft.

EDIT: versuchen fields_for-f.fields_for

+0

Danke aber wie ich sagte nach dem Öffnen des Browsers und dem Neustart des Servers die Felder angezeigt wurden. Jetzt ist mein Problem, dass wenn ich ein Meeting speichern, der Ort nicht automatisch wie erwartet gespeichert wird. Ich denke, dass der Hinweis in der URL ist, da meine Position in den Parametern nicht "location_attributes" sagt, sondern nur den Ort. – absolutskyy

+0

Sehen Sie, wenn die Änderung in meinem EDIT das Problem behebt. – cdesrosiers

+0

Ja, eine Kombination von beidem hat funktioniert. 1) hinzugefügt f.fields_for 2) hinzugefügt @ meeting.build_location. Vielen Dank Cdosrosiers – absolutskyy