Ich möchte ein migration
in Rails erstellen und auf eine andere Tabelle verweisen. Normalerweise würde ich so etwas machen wie:
add_column :post, :user, :references
Dadurch wird eine Spalte mit dem Namen user_id
in der posts
Tabelle erstellt. Aber was ist, wenn user_id
ich stattdessen so etwas möchte author_id
? Wie kann ich das machen?
schema_plus
gem,t.references :category, index: true, foreign_key: true, references: :match_categories
arbeitete auch für mich in der Migrationsdatei.Für Schienen 5+
Anfangsdefinition:
Wenn Sie Ihre definieren
Post
Modelltabelle, können Sie festlegenreferences
,index
undforeign_key
in einer Zeile:Update verfügbar:
Wenn Sie Verweise auf eine vorhandene Tabelle hinzufügen, können Sie dies tun:
Hinweis: Der Standardwert für
index
ist true.quelle
null
s. Fügen Sie die übliche Option hinzu, um sie nicht zuzulassennull: false
.In Rails 4.2+ können Sie auch Fremdschlüssel in der Datenbank festlegen , was eine gute Idee ist .
Für einfache Zuordnungen kann dies auch beim
t.references
Hinzufügen erfolgenforeign_key: true
. In diesem Fall benötigen Sie jedoch zwei Zeilen.quelle
references: :users
Option imadd_reference
Anruf benötigen . Ich sehe es nicht in den Dokumenten dokumentiert und es scheint an meinem Ende ohne es zu funktionieren.In Rails 4 können Sie bei Verwendung von postgresql und dem Juwel schema_plus einfach schreiben
Dadurch wird eine Spalte erstellt
author_id
, auf die korrekt verwiesen wirdusers(id)
.Und in Ihrem Modell schreiben Sie
Beachten Sie, dass Sie beim Erstellen einer neuen Tabelle Folgendes schreiben können:
quelle
create_table
:t.references :author, references: :users
:references
tatsächlich etwas bewirken.schema_plus
Juwel seit Ewigkeiten und es fügt tatsächlich diese Funktionalität hinzu. Ich habe meine Antwort entsprechend bearbeitet.t.references :col_name, references: other_table_name
ohne zusätzliche Edelsteine zu funktionieren.Wenn Sie keinen Fremdschlüssel verwenden, spielt es keine Rolle, wie der tatsächliche Tabellenname der anderen Tabelle lautet.
Ab Rails 5 können Sie bei Verwendung eines Fremdschlüssels den Namen der anderen Tabelle in den Fremdschlüsseloptionen angeben. (Weitere Informationen finden Sie unter https://github.com/rails/rails/issues/21563. )
Vor Rails 5 sollten Sie den Fremdschlüssel als separaten Schritt hinzufügen:
quelle
{to_table: :users}
alias_attribute (neuer_name, alter_name) ist sehr praktisch. Erstellen Sie einfach Ihr Modell und die Beziehung:
Bearbeiten Sie dann das Modell und fügen Sie einen Attributalias mit hinzu
Danach können Sie Dinge wie ausführen
quelle