Comment les rails savent-ils qu'il user_id
s'agit d'un référencement de clé étrangère user
?
Rails lui-même ne sait pas qu'il user_id
s'agit d'un référencement de clé étrangère user
. Dans la première commande, rails generate model Micropost user_id:integer
il ajoute uniquement une colonne, user_id
mais les rails ne connaissent pas l'utilisation du col. Vous devez mettre manuellement la ligne dans le Micropost
modèle
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
les mots-clés belongs_to
et has_many
déterminer la relation entre ces modèles et déclarer user_id
comme clé étrangère au User
modèle.
La dernière commande rails generate model Micropost user:references
ajoute la ligne belongs_to :user
dans le Micropost
modèle et déclare par la présente comme clé étrangère.
FYI La
déclaration des clés étrangères en utilisant l'ancienne méthode permet uniquement aux Rails de connaître la relation entre les modèles / tables. La base de données est inconnue sur la relation. Par conséquent, lorsque vous générez les diagrammes EER à l'aide d'un logiciel comme MySql Workbench
vous constatez qu'il n'y a pas de fils de relation dessinés entre les modèles. Comme dans la photo suivante
Cependant, si vous utilisez la méthode ultérieure, vous constatez que votre fichier de migration ressemble à:
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
La clé étrangère est désormais définie au niveau de la base de données. et vous pouvez générer des EER
diagrammes appropriés .