Polymorphe Assoziation

8

Wenn Sie polymorphe assignes_to-Zuordnungen haben, werden die Referenzen die beiden erforderlichen Spalten hinzufügen:

%Vor%

fügt eine Spalte attachment_id und eine Spalte attachment_type mit dem Standardwert 'Foto' hinzu.

Was genau bedeutet das?

    
Arc 31.03.2009, 05:34
quelle

3 Antworten

4

Grundsätzlich bietet die polymorphe Assoziation per Definition die Möglichkeit, Assoziationen mit vielen anderen Rails ActiveRecord Modellen zu erstellen.

Beide Spalten gibt es für Rails, um zu wissen, auf welches Modell die Assoziation verweist, Sie haben die attachet_type-Spalte (dh String) (Standardwert ist "Photo", Tabellenname: Fotos in der db), und die attachment_id ist eine Art wie ein Fremdschlüssel zu diesem bestimmten Modell / Tabelle (dh Foto).

Normalerweise bietet dies Ihnen die Flexibilität, ein Modell mit vielen anderen zu verknüpfen.

    
Rishav Rastogi 31.03.2009, 06:27
quelle
6

Hier ist die Dokumentation zur Referenzmethode: Ссылка

Der Code der Referenzmethode lautet wie folgt:

%Vor%

Wie Sie sehen können. Es fügt der Tabelle eine Spalte [col] _id und [col] _type hinzu.

Es ist dasselbe wie zu sagen:

%Vor%

Polymorphe Assoziationen werden verwendet, um eine Art von Objekten mit mehreren Arten anderer Objekte zu verbinden.

Ein gutes Beispiel könnte eine Anwendung sein, die Tags unterstützt, wo Tags sowohl mit Products als auch mit Categories verbunden werden können.

In Ihrem Beispiel sieht es so aus, als ob Produkte an mehrere Arten von Objekten angehängt werden könnten, wobei das Standardobjekt ein Foto ist. ( attachment_type wäre "Photo" und attachment_id wäre eine ID einer Zeile in der Tabelle "Fotos")

    
Gdeglin 31.03.2009 05:43
quelle
0

polymorph bedeutet, dass es zu verschiedenen Objekten (oder unterschiedlichen Datensätzen in verschiedenen Tabellen) gehören kann. Die Art und Weise, wie dies bestimmt wird, basiert auf den Typ- und ID-Feldern. Wenn Ihre Assoziation nicht polymorph wäre, hätte sie nur ein _id-Feld.

    
Ryan Bigg 31.03.2009 05:41
quelle

Tags und Links