Rails orders_to legt keine Fremdschlüssel-ID mit dem benutzerdefinierten Klassennamen fest

8

Ich habe meine Modelle wie folgt eingerichtet:

%Vor%

Angenommen:

%Vor%

Jetzt wirkt dieses Stück Code sehr seltsam

%Vor%

Nach dem Festlegen des Autors sollte das Attribut author_id des Posts auf die ID des Benutzers festgelegt werden. Aber das passiert nicht.

Ich habe versucht, Modelle mit belongs_to zu verwenden, die nicht den Parameter class_name haben, und alles funktioniert wie erwartet.

Nun, noch eine Sache, die es seltsamer macht, ist, dass, wenn ich die Zuordnung zu belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' ändere, es überraschend funktioniert.

Ist das ein Fehler in Rails 3.0.9? Sollte der Parameter für den Fremdschlüssel nicht notwendig sein, ist der Default-Wert, wie die Dokumentation sagt, der Name der Assoziation, die mit _id angehängt ist.

Beachten Sie auch, dass auch ohne :foreign_key => 'author_id' alles andere in Bezug auf die Assoziation wie erwartet funktioniert. (Wie beim Abrufen des zugehörigen Modells) Das einzige, was nicht funktioniert, ist die Setter-Methode, die den Fremdschlüssel nicht setzt.

Ich weiß, ich könnte einfach p.author_id = a.id machen oder einfach :foreign_key params zu all meinen Assoziationen mit class_name hinzufügen, aber ich bevorzuge die elegantere Syntax von p.author = a

    
Engwan 09.07.2011, 15:11
quelle

1 Antwort

6

Nachdem ich viele Zeilen Code und Tracing durchgelesen habe, habe ich folgendes gefunden:

Dieser Fehler existiert wegen des Gems composite_primary_keys , das die Standard-Rails reflection.rb übersteuert hat.

Ich werde prüfen müssen, wie sie die Methoden primary_key_name und derive_primary_key_name implementiert haben.

Es war ziemlich viel Zeit für diesen albernen Bug verschwendet, aber zumindest habe ich viel über ActiveRecords Interna gelernt.

    
Engwan 09.07.2011, 16:09
quelle

Tags und Links