142

tableRails アプリでテーブルを作成したとします。しばらくして、実行中の列を追加します。

rails generate migration AddUser_idColumnToTable user_id:string. 

次にuser_id、インデックスとして追加する必要があることに気付きました。メソッドについては知っていadd_indexますが、このメソッドはどこで呼び出す必要がありますか? 移行を実行することになっていますか (はいの場合、どれですか?)、このメソッドを手動で追加しますか?

4

6 に答える 6

267

インデックスのためだけに、別の移行を実行できます。

class AddIndexToTable < ActiveRecord::Migration
  def change
    add_index :table, :user_id
  end
end
于 2013-04-08T14:31:47.553 に答える
73

を作成する必要がuser_idある場合は、ユーザー テーブルを参照していると考えるのが妥当です。その場合、移行は次のようになります。

rails generate migration AddUserRefToProducts user:references

このコマンドは、次の移行を生成します。

class AddUserRefToProducts < ActiveRecord::Migration
  def change
    add_reference :user, :product, index: true
  end
end

列とインデックスのrake db:migrate両方を実行すると、テーブルに追加されます。user_idproducts

nameテーブルなどの既存の列にインデックスを追加する必要がある場合はuser、次の手法が役立つ場合があります。

rails generate migration AddIndexToUsers name:string:index次の移行が生成されます。

class AddIndexToUsers < ActiveRecord::Migration
  def change
    add_column :users, :name, :string
    add_index :users, :name
  end
end

行を削除add_columnして移行を実行します。

説明されているケースでは、コマンドを発行してから、生成された移行から行をrails generate migration AddIndexIdToTable index_id:integer:index削除できます。add_columnただし、最初の移行を元に戻し、代わりに参照を追加することをお勧めします。

rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references
于 2014-07-08T23:01:43.743 に答える
14

次の列を作成した後、生成された移行を追加します (例)。

add_index :photographers, :email, :unique => true
于 2013-04-08T14:32:28.983 に答える