Ecco la documentazione sul metodo riferimenti: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001938
Il codice del metodo di riferimento è il seguente:
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
Come si può vedere. Aggiunge una colonna [col] _id e [col] _type alla tabella.
E 'lo stesso che dire:
create_table :products do |t|
t.integer :attachment_id
t.string :attachment_type, :default => 'Photo'
end
associazioni polimorfiche sono utilizzati per collegare un tipo di oggetti a più tipi di altri oggetti.
Un buon esempio potrebbe essere un'applicazione che supporta i tag, dove i tag possono essere collegati sia a Products
e a Categories
.
Nel tuo esempio, sembra che i Prodotti possano essere collegati a più tipi di oggetti, in cui il tipo di oggetto predefinito è una Foto. (attachment_type
sarebbe "Foto" e attachment_id
sarebbe un ID di una riga nella tabella "foto")
Volevo solo sapere cosa succede a livello di database quando eseguo la migrazione. – Arc