Carriles 4.x
Cuando ya tienes users
y uploads
mesas 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_id
auploads
tabla (haciendo referencia a la id
columna en la users
tabla), 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_id
columna de la uploads
tabla. La clave hace referencia a la id
columna en la users
tabla.
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
, mysql2
y los PostgreSQL
adaptadores son compatibles. No intente esto con otros adaptadores como sqlite3
, etc. Consulte las guías de Rails: claves externas para su referencia.