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:
rails generate migration AddUserRefToProducts user:references
Dieser Befehl generiert die folgende Migration:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
Nach dem Ausführen werden rake db:migrate
sowohl eine user_id
Spalte als auch ein Index zur products
Tabelle hinzugefügt .
Wenn Sie einer vorhandenen Spalte, z. B. name
einer user
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:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
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 die add_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:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references