Woher weiß Rails, dass user_id
es sich um eine Fremdschlüsselreferenzierung handelt user
?
Rails selbst weiß nicht, dass user_id
es sich um eine Fremdschlüsselreferenzierung handelt user
. Im ersten Befehl rails generate model Micropost user_id:integer
wird nur eine Spalte user_id
hinzugefügt, Rails kennt jedoch die Verwendung der Spalte nicht. Sie müssen die Linie manuell in das Micropost
Modell einfügen
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
die Schlüsselwörter belongs_to
und has_many
bestimmen die Beziehung zwischen diesen Modellen und deklarieren user_id
als Fremdschlüssel zum User
Modell.
Der spätere Befehl rails generate model Micropost user:references
fügt die Zeile belongs_to :user
in das Micropost
Modell ein und deklariert hiermit als Fremdschlüssel.
Zu Ihrer
Information Wenn Sie die Fremdschlüssel mit der vorherigen Methode deklarieren, werden die Rails nur über die Beziehung der Modelle / Tabellen informiert. Die Datenbank ist über die Beziehung unbekannt. Wenn Sie die EER-Diagramme mit einer Software wie der folgenden erstellen, stellen MySql Workbench
Sie daher fest, dass zwischen den Modellen keine Beziehungsthreads gezogen werden. Wie im folgenden Bild
Wenn Sie jedoch die spätere Methode verwenden, sieht Ihre Migrationsdatei folgendermaßen aus:
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
Jetzt wird der Fremdschlüssel auf Datenbankebene festgelegt. und Sie können geeignete EER
Diagramme erstellen.