¿Cómo sabe Rails que se user_idtrata de una referencia de clave externa user?
Rails en sí mismo no sabe que se user_idtrata de una referencia de clave externa user. En el primer comando rails generate model Micropost user_id:integersolo agrega una columna, user_idsin embargo, rails no conoce el uso de la columna. Necesita poner manualmente la línea en el Micropostmodelo
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
las palabras clave belongs_toy has_manydeterminar la relación entre estos modelos y declarar user_idcomo una clave externa para Usermodelar.
El comando posterior rails generate model Micropost user:referencesagrega la línea belongs_to :useren el Micropostmodelo 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 Workbenchque 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 EERdiagramas adecuados .
