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:integer
ele adiciona apenas uma coluna, user_id
mas o Rails não conhece o uso do col. Você precisa colocar manualmente a linha no Micropost
modelo
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
as palavras-chave belongs_to
e has_many
determinar a relação entre esses modelos e declarar user_id
como uma chave estrangeira para o User
modelo.
O comando posterior rails generate model Micropost user:references
adiciona a linha belongs_to :user
no Micropost
modelo 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 Workbench
o 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 EER
diagramas adequados .