¿Cómo sabe Rails que se user_id
trata de una referencia de clave externa user
?
Rails en sí mismo no sabe que se user_id
trata de una referencia de clave externa user
. En el primer comando rails generate model Micropost user_id:integer
solo agrega una columna, user_id
sin embargo, rails no conoce el uso de la columna. Necesita poner manualmente la línea en el Micropost
modelo
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
las palabras clave belongs_to
y has_many
determinar la relación entre estos modelos y declarar user_id
como una clave externa para User
modelar.
El comando posterior rails generate model Micropost user:references
agrega la línea belongs_to :user
en el Micropost
modelo y por la presente se declara como una clave foránea.
Para su información,
declarar las claves foráneas utilizando el método anterior solo permite que los Rails sepan sobre la relación que tienen los modelos / tablas. La base de datos es desconocida sobre la relación. Por lo tanto, cuando genera los diagramas EER utilizando un software como el MySql Workbench
que encuentra, no hay hilos de relación entre los modelos. Como en la siguiente foto
Sin embargo, si utiliza el método posterior, encontrará que su archivo de migración se ve así:
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
Ahora la clave externa se establece en el nivel de la base de datos. y puedes generar EER
diagramas adecuados .