Rails 3.1: accepts_nested_attributes_for und has_one association - wird nicht funktionieren?

8

Ich versuche, access_nested_attributes_for in einem has_one-Assoziationsmodell zu verwenden und absolut nirgendwohin zu kommen: - (

Ich habe zwei Modelle, einen Benutzer und einen Ort. Ein Benutzer hat einen Standort:

%Vor%

Ich kann Änderungen am Modell speichern, indem ich User.find(1).location.current_location_text = "blah" von der Konsole aus verwende, damit ich weiß, dass die Verknüpfungen korrekt eingerichtet sind.

Ich habe zwei Formulare auf der Benutzerseite bearbeiten. Eine, die die Hauptbenutzerattribute aktualisiert (und gut funktioniert und nicht weiter unten gezeigt wird) und dann diese, die es dem Benutzer ermöglicht, ein Attribut des Standortmodells, "current_location_text" genannt, zu aktualisieren:

%Vor%

Das funktioniert nicht. Ich bin etwas verwirrt, da die vom Formular gesendeten Parameter falsch aussehen. Wenn das Formular gesendet wird, ist dies im Protokoll:

%Vor%

Zwei Dinge, die ich seltsam finde:

  1. Es gibt die Nachricht "COMMIT", aber keine vorhergehende Update-Zeichenfolge und kein Fehler. Wenn Sie beispielsweise versucht haben, ein geschütztes Attribut zu übergeben, erhalten Sie zu diesem Zeitpunkt die Fehlermeldung "Sie können keine Massenzuweisung vornehmen ...".

  2. Die Params sehen für mich falsch aus. Das "location" -Bit ist wie erwartet verschachtelt, aber ich würde auch erwarten, dass dies innerhalb des "user" -Hashes verschachtelt ist, etwa so:

    %Vor%

Ich glaube nicht, dass ich hier völlig dumm bin. Fehle ich etwas wirklich offensichtlich? Ich habe versucht, zusätzliche versteckte Felder zu meinem Formular hinzufügen, dh eine Benutzer-ID, und dann bekomme ich den Benutzer-Hash, aber auf der gleichen Ebene wie der "Standort" Hash und nicht als ein Elternteil davon, wie ich es erwarten würde!

Auch wenn es hilft, hier ist mein Update innerhalb meines UsersController:

def Aktualisierung     @user = Benutzer.find (params [: id])

%Vor%

Ende

und hier ist, was in meinem routes.rb ist (obwohl ich nicht denke, dass es relevant ist):

%Vor%

Jede Hilfe wird geschätzt. Wenn ich das nicht löse, geht der Laptop aus dem Fenster. Danke.

    
DaveStephens 08.10.2011, 00:04
quelle

2 Antworten

11
%Vor%

Das ist dein Problem. Sie müssen die fields_for in Ihrem Formular tatsächlich "verschachteln", wie folgt:

%Vor%     
Elliot Nelson 08.10.2011, 01:52
quelle
5

Versuchen Sie es stattdessen

%Vor%

Geben Sie rails nicht an, welcher Assoziation Sie es laden möchten, anstatt es selbst zu übergeben.

    
Jesse Wolgamott 08.10.2011 01:47
quelle