Carriles 4.x
Cuando ya tienes users y uploadsmesas y desea agregar una nueva relación entre ellos.
Todo lo que necesita hacer es: simplemente generar una migración con el siguiente comando:
rails g migration AddUserToUploads user:references
Lo que creará un archivo de migración como:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
Luego, ejecute la migración usando rake db:migrate. Esta migración se encargará de agregar una nueva columna llamada user_idauploads tabla (haciendo referencia a la idcolumna en la userstabla), ADEMÁS, también agregará un índice en la nueva columna.
ACTUALIZACIÓN [Para Rails 4.2]
No se puede confiar en los rieles para mantener la integridad referencial; bases de datos relacionales vienen a nuestro rescate aquí. Lo que eso significa es que podemos agregar restricciones de clave externa en el nivel de la base de datos y garantizar que la base de datos rechace cualquier operación que viole esta integridad referencial establecida. Como comentó @infoget, Rails 4.2 viene con soporte nativo para claves foráneas (integridad referencial) . No es obligatorio, pero es posible que desee agregar una clave externa (ya que es muy útil) a la referencia que creamos anteriormente.
Para agregar una clave externa a una referencia existente , cree una nueva migración para agregar una clave externa:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
Para crear una referencia completamente nueva con una clave foránea (en Rails 4.2) , genere una migración con el siguiente comando:
rails g migration AddUserToUploads user:references
que creará un archivo de migración como:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
Esto agregará una nueva clave externa a la user_idcolumna de la uploadstabla. La clave hace referencia a la idcolumna en la userstabla.
NOTA: Esto es además de agregar una referencia, por lo que aún debe crear una referencia primero y luego una clave externa ( puede elegir crear una clave externa en la misma migración o en un archivo de migración separado ). Active Record solo admite claves foráneas de una sola columna y actualmente solo mysql, mysql2y los PostgreSQLadaptadores son compatibles. No intente esto con otros adaptadores como sqlite3, etc. Consulte las guías de Rails: claves externas para su referencia.