Вот документация по методу ссылок:
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001938
Код метода ссылок следующий:
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
Как видите. Он добавляет в таблицу столбцы [col] _id и [col] _type.
Это то же самое, что сказать:
create_table :products do |t|
t.integer :attachment_id
t.string :attachment_type, :default => 'Photo'
end
Полиморфные ассоциации используются для соединения объектов одного типа с множеством других объектов.
Хорошим примером может служить приложение, которое поддерживает теги, где теги могут быть связаны как с Products
, так и с Categories
.
В вашем примере похоже, что Продукты могут быть присоединены к нескольким типам объектов, где типом объекта по умолчанию является Фотография. (attachment_type
будет «Фото», а attachment_id
будет идентификатором строки в таблице «фото»)