Ruby on rails 使用add_引用时指定自定义索引名称

Ruby on rails 使用add_引用时指定自定义索引名称,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,rails-migrations,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,Rails Migrations,我有以下迁移 class LinkDoctorsAndSpecializations < ActiveRecord::Migration def up add_reference :doctors, :doctor_specialization, polymorphic: true, index: true end def down remove_reference :doctors, :doctor_specialization, polymorphic:

我有以下迁移

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
class-linkdoctorsandespecializations
当我运行
rakedb:migrate
时,我得到了一个错误

表“doctors”上的索引名称“Index\u doctors\u on\u doctor\u specialization\u type\u和\u doctor\u specialization\u id”太长;限制为63个字符


那么,在使用add_引用时,如何像我们在
add_index:table,:column,:name=>“index name”

中指定的那样指定索引名呢?这实际上是可行的:

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

更多示例。

我听说解决此问题的最佳方法是将其从“添加参考行”中删除,并在下面手动指定,就像问题的最后一行一样

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
class-linkdoctorsandespecializations
我不建议省略“添加引用”,但您可以省略“索引”选项哈希键,然后使用“添加索引”:

或者,更合适的方式如下:

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

你应该做
add_index:table,:column,:name=>“index name”
这是重复的。我建议强调你答案的第二部分(在
add_reference
中用名称传递散列到index:in
add_reference
,这似乎是你想要的方法,使用
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' }