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_idzu uploadsTabelle (Referenzierung idSpalt in usersTabelle), 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_idSpalte der uploadsTabelle ein neuer Fremdschlüssel hinzugefügt . Der Schlüssel verweist auf die idSpalte in der usersTabelle.
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, mysql2und PostgreSQLAdapter werden unterstützt. Versuchen Sie dies nicht mit anderen Adaptern wie sqlite3usw. Siehe Rails Guides: Foreign Keys als Referenz.