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.
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")
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.
Tags und Links ruby ruby-on-rails migration