2010-11-23 13 views
1

Ich bin mit dem folgenden Problem in Schienen konfrontiert. Ich habe ein Formular zum Bearbeiten/Erstellen eines neuen Projekts, das 1 bis n Unterprojekte enthalten kann, die wiederum 1 bis n Aufgaben enthalten können.Rails Multi-Modell-Form mit Daten mit einem Hash mit einem Hash

Also, wenn ich ein neues Projekt an der Steuerung ausführt:

@project = Project.new 
sub_project = SubProject.new 
work = Work.new 
sub_project.works << work 
@project.sub_projects << sub_project 

die Grundstruktur ich die Eingabefelder in der Ansicht zu erzeugen, die Form mich so aufbauen:

Projekt

<% form_for (:project, :url => action_parameter, :id => project) do |form| %> 

Teilprojekt

<% fields_for "project[sub_projects][]", sub_project do |subproject_form| %> 

Bis hier lief alles gut aber wie definiere ich jetzt die Felder_für die Aufgaben? Der folgende Versuch ..

<% fields_for "project[sub_projects][works][]", work do |work_form| %> 

.. ist nicht die Lösung, wie ich die folgende Fehlermeldung von Mischlings erhalten:

Widersprüchliche Typen für Parameter Container. Erwartete eine Instanz von Hash, aber eine Instanz von Array gefunden. Dies kann verursacht werden, indem Array und Hash-basierte Parameter übergeben werden. qs [] = Wert & qs [Schlüssel] = Wert.

Warum funktioniert das nicht? Und wie soll ich mein Problem angehen?

Antwort

1

Sie müssen ein verschachteltes Modellformular verwenden. Check out this web cast von Ryan Bates.

+0

Hmm .. leider ist der Code, an dem ich arbeite, immer noch Rails 1.2.3 und das Zusammenführen zu 2.x oder sogar 3.x ist im Moment immer noch weit außerhalb meiner Liga .. – Mark

+0

nach Aktualisierung meiner Anwendung auf 2.3 Es war definitiv der richtige Weg. Also danke für den Tipp. – Mark

1

Der Grund, warum mein Code nicht war nicht funktioniert, dass ich ein paar zusätzliche Klammern in der Arbeitsleitung hinzuzufügen vergessen ..

<% fields_for "project[sub_projects][][works][]", work do |work_form| %> 

jedoch, was ich mit Pre Rails 2.3 scheint nicht möglich zu tun versucht. X. Also habe ich meine App auf diese Version aktualisiert und dann die verschachtelten Formulare verwendet, die John Drummond vorgeschlagen hat.

Verwandte Themen