Warum ist der source_type für diese polymorphe Assoziation immer 0?

8

Aus irgendeinem Grund ist der Quelltyp für eine polymorphe has_many :through Assoziation immer 0, obwohl ein :source_type festgelegt wurde.

So sehen meine Models aus ...

Foo:

%Vor%

Leiste:

%Vor%

TaggedItem:

%Vor%

Stichwort:

%Vor%

Soweit ich feststellen kann, ist das ein sehr gutes Setup, und ich kann Tags erstellen / hinzufügen, aber das taggable_type endet immer mit 0.

Irgendeine Idee warum? Google hat nichts aufgedeckt.

    
hobberwickey 27.02.2014, 11:59
quelle

2 Antworten

4

Ich habe das selbst herausgefunden, nur weil ich sicher bin, dass ich nicht die erste oder letzte Person bin, die diesen dummen Fehler gemacht hat (tatsächlich habe ich es vielleicht schon vorher getan). Ich habe den Spaltentyp in das Feld taggable_type als Ganzzahl anstelle einer Zeichenfolge eingefügt.

Sie denken, dass dies einen Fehler verursachen könnte, tut es aber nicht. Es funktioniert einfach nicht.

    
hobberwickey 03.03.2014, 21:13
quelle
5

Ein funktionierendes Beispiel mit Tests für die Modelle in der Frage findet sich hier .

Der Grund, warum es bei der Frage nicht funktionierte, ist die Migration db/migrate/[timestamp]_create_tagged_items sollte folgendermaßen erzeugt werden:

%Vor%

Beachten Sie, dass t.references :taggable, polymorphic:true zwei Spalten in schema.rb erzeugt:

%Vor%

Also, mit den gleichen Modellen in der Frage und dieser Migration, bestehen die folgenden Tests:

%Vor%

Hinweis: Rails 3 hat ein aktives Problem bezüglich has_many :through und polymorpher Assoziationen, wie hier hier dargestellt. In Rails 4 ist dies jedoch gelöst.

PS: Da ich etwas zu dieser Frage recherchiert habe, könnte ich die Antwort auch posten, falls jemand davon profitieren könnte ...:)

    
raviolicode 04.03.2014 00:07
quelle