como os trilhos sabem que user_idé uma referência de chave estrangeira user?
O próprio Rails não sabe que user_idé uma referência de chave estrangeira user. No primeiro comando, rails generate model Micropost user_id:integerele adiciona apenas uma coluna, user_idmas o Rails não conhece o uso do col. Você precisa colocar manualmente a linha no Micropostmodelo
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
as palavras-chave belongs_toe has_manydeterminar a relação entre esses modelos e declarar user_idcomo uma chave estrangeira para o Usermodelo.
O comando posterior rails generate model Micropost user:referencesadiciona a linha belongs_to :userno Micropostmodelo e declara como uma chave estrangeira.
Para sua informação,
declarar as chaves estrangeiras usando o método anterior apenas permite que o Rails saiba sobre o relacionamento que os modelos / tabelas têm. O banco de dados é desconhecido sobre o relacionamento. Portanto, quando você gera os diagramas EER usando um software como MySql Workbencho encontrado, não há segmentos de relacionamento desenhados entre os modelos. Como na foto a seguir

No entanto, se você usar o método posterior, verá que o arquivo de migração se parece com:
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
Agora a chave estrangeira está definida no nível do banco de dados. e você pode gerar EERdiagramas adequados .
