ruby-on-rails - 如何在 Ruby on Rails ActiveRecord 迁移中处理过长的索引名称?

标签 ruby-on-rails indexing migration

我正在尝试添加一个从四个关联表的外键创建的唯一索引:

add_index :studies,
  ["user_id", "university_id", "subject_name_id", "subject_type_id"],
  :unique => true

数据库对索引名称的限制导致迁移失败。这是错误消息:

Index name 'index_studies_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id' on table 'studies' is too long; the limit is 64 characters

我该如何处理这个问题?我可以指定不同的索引名称吗?

最佳答案

add_index 提供 :name 选项,例如:

add_index :studies,
  ["user_id", "university_id", "subject_name_id", "subject_type_id"], 
  unique: true,
  name: 'my_index'

如果在 references 上使用 :index 选项在 create_table block 中,它采用与 add_index 相同的选项哈希作为其值:

t.references :long_name, index: { name: :my_index }

关于ruby-on-rails - 如何在 Ruby on Rails ActiveRecord 迁移中处理过长的索引名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5443740/

相关文章:

php - 如何使用 "if exists"在 MySQL 中创建或删除索引?

将根域主页重定向到另一个域子目录

css - 如何在 Rails 上显示整页背景图片?

oracle - 对只有 5 个不同值的列进行索引 - 值得吗?

mysql - SQL 边界框优化

sql - 如何用SQL Server实现LIMIT?

ruby-on-rails - Ruby on Rails 删除的迁移仍在 Heroku 上运行

ruby-on-rails - 使用 Squeel gem 查找多个时间段

ruby-on-rails - ?在routes.rb和map.with_options ruby​​中

ruby-on-rails - ruby on rails 忽略了我的 form_tag