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
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.
Tags und Links ruby-on-rails-3 belongs-to