Ich habe ein Juwel geschrieben, das Google Spreadsheets in Rails-Modelle umgewandelt werden kann. Die Abfolge dieses Prozesses beinhaltet das Erstellen aller Modelle, anschließendes Verknüpfen ihrer Assoziationen und das Speichern aller Modelle. Es unterstützt alle Arten von Assoziationen, die verfügbar sind, und in jedem Fall wird der erste Balken erstellt, indem die Modelle erstellt, Assoziationen hergestellt und dann die Modelle korrekt gespeichert werden. Die Ausnahme ist, wie folgt:Etablierung eines Has One Through vs hat viele mit nicht gespeicherten Models
Ich habe eine einfache has_one, through
Assoziation (Zugang der Kürze halber weggelassen Attribut):
class Left < ActiveRecord::Base
has_many :middles, dependent: :destroy
has_many :rights, through: :middles
end
class Right < ActiveRecord::Base
has_one :middle, dependent: :destroy
has_one :left, through: :middle
end
class Middle < ActiveRecord::Base
belongs_to :left
belongs_to :right
end
Ich bin etwas inkonsistentes Verhalten zu finden, je nachdem, welche Seite die Zuordnung des Vereins besteht:
left = Left.new
right = Right.new
left.rights << right
left.middles #[]
right.middle #nil
left.save!
left.middles # <Middle theme_id: 1, archive_resource_id: 1 >
rechts Zuordnung nach links::
rechts Zuordnung nach links
left = Left.new
right = Right.new
right.left = left
left.middles #[]
right.middle <Middle theme_id: nil, archive_resource_id: nil >
right.save!
right.middle # <Middle theme_id: nil, archive_resource_id: 1 >
Dieses Verhalten scheint sehr inkonsistent. Warum ist das? Warum funktioniert das in die eine Richtung und nicht in die andere? Gibt es eine Möglichkeit, diese Beziehung mit beiden ungesicherten Aufzeichnungen herzustellen?
Ich schätze, dass die offensichtliche Lösung ist alles zu retten, bevor die Beziehungen einrichten, aber wie oben erläutert, muss ich die Modelle nicht gespeicherten sein, wenn die Verbände etabliert, und in jeder anderen Art von Vereinigung gibt ist in dieser Hinsicht kein Problem.
Wenn '' 'Left''' und' '' Right''' Modelle auch geerbt von '' 'Activerecord :: Base '' '? Auch warum '' 'Left''' Modell' '' has_many: right'''? Vielleicht sollte es '' 'has_many: rightS''' oder' '' has_one: right''' sein? – freemanoid
@freemanoid Sorry, ja sie sind (geändert in Frage). – Undistraction
'' 'has_many: middleS''' und' '' has_many: rightS''' – freemanoid