Migrations: t.references не позволяет указывать имя индекса

В миграции есть следующее:

create_table :model_with_a_long_name do |t|
  t.references :other_model_with_an_equally_long_name, index: true
end

Это создает индекс с слишком длинным именем для Postgres.

Есть ли способ вручную указать имя индекса (без добавления целочисленного столбца и индекса отдельно)?

Что-то вроде следующего:

create_table :model_with_a_long_name do |t|
  t.references :other_model_with_an_equally_long_name, index: true, index_name: 'model_and_other'
end

?

+19
25 февр. '15 в 18:51
источник поделиться
2 ответа

В соответствии с Код Rails для references вы можете сделать это, предоставив index a Hash с параметрами, которые вам нужно вызвать :name, поэтому:

t.references :my_field, index: { name: 'my_index_name' }
+36
25 февр. '15 в 19:48
источник

Указать его вручную:

  t.integer :othermodel_id
  ...
end
add_index :thismodel, :othermodel_id, index_name: 'othermodel_index'
+1
25 февр. '15 в 19:44
источник

Посмотрите другие вопросы по меткам или Задайте вопрос