Angenommen, ich habe eine Tabelle table
in einer Rails-App erstellt. Einige Zeit später füge ich eine Spalte hinzu, die ausgeführt wird:
rails generate migration AddUser_idColumnToTable user_id:string.
Dann wird mir klar, dass ich user_id
als Index hinzufügen muss . Ich weiß über die add_index
Methode Bescheid , aber wo soll diese Methode aufgerufen werden? Soll ich eine Migration durchführen (wenn ja, welche?) Und diese Methode dann von Hand hinzufügen?
ruby-on-rails
indexing
migration
user1611830
quelle
quelle
:table
ist der eigentliche Name der Tabelle, so im Fall einerusers
Tabelle, dann würden Sie ersetzen:users
für:table
.Wenn Sie eine erstellen müssen,
user_id
ist es eine vernünftige Annahme, dass Sie auf eine Benutzertabelle verweisen. In diesem Fall muss die Migration sein:Dieser Befehl generiert die folgende Migration:
Nach dem Ausführen werden
rake db:migrate
sowohl eineuser_id
Spalte als auch ein Index zurproducts
Tabelle hinzugefügt .Wenn Sie einer vorhandenen Spalte, z. B.
name
eineruser
Tabelle, nur einen Index hinzufügen müssen , kann die folgende Technik hilfreich sein:rails generate migration AddIndexToUsers name:string:index
generiert die folgende Migration:add_column
Zeile löschen und Migration ausführen.In dem beschriebenen Fall könnten Sie einen
rails generate migration AddIndexIdToTable index_id:integer:index
Befehl ausgegeben und dann dieadd_column
Zeile aus der generierten Migration gelöscht haben . Ich würde jedoch eher empfehlen, die anfängliche Migration rückgängig zu machen und stattdessen eine Referenz hinzuzufügen:quelle
Fügen Sie in der generierten Migration nach dem Erstellen der Spalte Folgendes hinzu (Beispiel)
quelle
Für Referenzen können Sie anrufen
Wenn Sie in Zukunft einen allgemeinen Index hinzufügen müssen, können Sie diesen starten
Code generieren:
quelle
Sie können dies verwenden. Denken Sie nur, Job ist der Name des Modells, zu dem Sie den Index cader_id hinzufügen :
quelle