Aquí está la documentación sobre el método de referencias: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001938
El código del método de referencias es el siguiente:
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
Como se puede ver. Agrega una columna [col] _id y [col] _type a la tabla.
¡Es lo mismo que decir:
create_table :products do |t|
t.integer :attachment_id
t.string :attachment_type, :default => 'Photo'
end
asociaciones polimórficas se utilizan para conectar un tipo de objetos a varios tipos de otros objetos.
Un buen ejemplo podría ser una aplicación que admita etiquetas, donde las etiquetas se pueden conectar tanto a Products
como a Categories
.
En su ejemplo, parece que los Productos se pueden unir a varios tipos de objetos, donde el tipo de objeto predeterminado es una Foto. (attachment_type
habría "Foto", y attachment_id
sería un id de una fila en la tabla 'fotos')
Solo quería saber qué sucede en el nivel de la base de datos cuando ejecuto la migración. – Arc