Here is the documentation on the references method:
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001938
The code of the references method is as follows:
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
As you can see. It adds both a [col]_id and [col]_type column to the table.
It's the same as saying:
create_table :products do |t|
t.integer :attachment_id
t.string :attachment_type, :default => 'Photo'
end
Polymorphic associations are used to connect one kind of objects to multiple kinds of other objects.
A good example might be an application that supports tags, where tags can be connected to both Products
and Categories
.
In your example, it looks like Products could be attached to multiple kinds of objects, where the default kind of object is a Photo. (attachment_type
would be "Photo", and attachment_id
would be an id of a row in the 'photos' table)