Schienen 4.x.
Wenn Sie bereits Tabellen habenusers
und eine neue Beziehung zwischen ihnen hinzufügenuploads
möchten .
Alles, was Sie tun müssen, ist: Generieren Sie einfach eine Migration mit dem folgenden Befehl:
rails g migration AddUserToUploads user:references
Welches erstellt eine Migrationsdatei als:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
Führen Sie dann die Migration mit aus rake db:migrate
. Diese Migration kümmert sich um eine neue Spalte hinzuzufügen Namen user_id
zu uploads
Tabelle (Referenzierung id
Spalt in users
Tabelle), PLUS wird es auch einen Index für die neue Spalte hinzuzufügen.
UPDATE [Für Schienen 4.2]
Rails kann nicht als vertrauenswürdig eingestuft werden, um die referenzielle Integrität aufrechtzuerhalten. Hier helfen uns relationale Datenbanken . Dies bedeutet, dass wir auf Datenbankebene selbst Fremdschlüsseleinschränkungen hinzufügen und sicherstellen können, dass die Datenbank alle Vorgänge ablehnt, die diese referenzielle Integrität verletzen. Wie @infoget kommentierte, wird Rails 4.2 mit nativer Unterstützung für Fremdschlüssel geliefert (referenzielle Integrität) . Es ist nicht erforderlich, aber Sie möchten möglicherweise einen Fremdschlüssel (da dies sehr nützlich ist) zu der oben erstellten Referenz hinzufügen.
Um einer vorhandenen Referenz einen Fremdschlüssel hinzuzufügen, erstellen Sie eine neue Migration, um einen Fremdschlüssel hinzuzufügen:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
Um eine völlig neue Referenz mit einem Fremdschlüssel (in Rails 4.2) zu erstellen , generieren Sie eine Migration mit dem folgenden Befehl:
rails g migration AddUserToUploads user:references
Dadurch wird eine Migrationsdatei erstellt als:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
Dadurch wird der user_id
Spalte der uploads
Tabelle ein neuer Fremdschlüssel hinzugefügt . Der Schlüssel verweist auf die id
Spalte in der users
Tabelle.
HINWEIS: Dies ist zusätzlich zum Hinzufügen einer Referenz erforderlich, sodass Sie zuerst eine Referenz und dann einen Fremdschlüssel erstellen müssen ( Sie können wählen, ob Sie einen Fremdschlüssel in derselben Migration oder in einer separaten Migrationsdatei erstellen möchten ). Active Record unterstützt nur einzelne Spalte Fremdschlüssel und zur Zeit nur mysql
, mysql2
und PostgreSQL
Adapter werden unterstützt. Versuchen Sie dies nicht mit anderen Adaptern wie sqlite3
usw. Siehe Rails Guides: Foreign Keys als Referenz.