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:inadd_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' }