Hier finden Sie die Dokumentation zur Methode references: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001938
Der Code der references Methode sieht wie folgt aus:
497: def references(*args)
498: options = args.extract_options!
499: polymorphic = options.delete(:polymorphic)
500: args.each do |col|
501: column("#{col}_id", :integer, options)
502: column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) unless polymorphic.nil?
503: end
504: end
Wie Sie sehen können, fügt es sowohl eine [col]_id als auch eine [col]_type Spalte zur Tabelle hinzu.
Es ist das Gleiche wie:
create_table :products do |t|
t.integer :attachment_id
t.string :attachment_type, :default => 'Photo'
end
Polymorphe Beziehungen werden verwendet, um eine Art von Objekten mit mehreren Arten von anderen Objekten zu verbinden.
Ein gutes Beispiel wäre eine Anwendung, die Tags unterstützt, wobei Tags mit sowohl Produkten
als auch Kategorien
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 die Standardart von Objekt ein Foto ist. (attachment_type
wäre "Photo" und attachment_id
wäre die ID einer Zeile in der Tabelle 'photos')