web-dev-qa-db-ja.com

add_referenceを使用するときにカスタムインデックス名を指定する

次の移行があります

class LinkDoctorsAndSpecializations < ActiveRecord::Migration
  def up
    add_reference :doctors, :doctor_specialization, polymorphic: true, index: true
  end

  def down
    remove_reference :doctors, :doctor_specialization, polymorphic: true
  end
end

rake db:migrateを実行すると、エラーが発生します

Index name 'index_doctors_on_doctor_specialization_type_and_doctor_specialization_id' on table 'doctors' is too long; the limit is 63 characters

したがって、add_index :table, :column, :name => 'index name'で指定する方法のように、add_referenceを使用するときに、インデックス名を指定するにはどうすればよいですか。

17
bhanu

私として コメント 、実行:

add_index :table, :column, name: 'index name' 

これが ドキュメント です。または、これを試すことができます:

class LinkDoctorsAndSpecializations < ActiveRecord::Migration
  def change
    add_reference :doctors, :doctor_specialization, polymorphic: true, index: { name: 'index name' }
  end
end
48
Arup Rakshit

これは実際に機能します:

add_index :table, :column, name: 'index name'

見てください 他の例については。

4
Andrey Deineko

「add_reference」を省略することはお勧めしませんが、「index」オプションのハッシュキーを省略してから「add_index」を使用することはできます。

add_reference :table, :column
add_index :table, :column, :name => 'index_table_column'

または、より適切な方法は次のようになります。

add_reference :doctors, :doctor_specialization, polymorphic: true, index: { name: 'index_doctors_doctor_specialization' }
1
donbradken

これを修正する最善の方法は、追加の参照行から除外し、質問の最後の行のように、以下で手動で指定することだと聞きました。

add_index :table, :column, :name => 'index name'
0
errata