相关疑难解决方法(0)

如何在Ruby on Rails ActiveRecord迁移中处理太长的索引名称?

我试图添加一个从四个相关表的外键创建的唯一索引:

add_index :studies,
  ["user_id", "university_id", "subject_name_id", "subject_type_id"],
  :unique => true
Run Code Online (Sandbox Code Playgroud)

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

表'研究'上的索引名称'index_studies_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id'太长; 限制为64个字符

我怎么处理这个?我可以指定不同的索引名称吗?

migration ruby-on-rails

369
推荐指数
7
解决办法
8万
查看次数

索引迁移的名称太长

我必须创建一个迁移来进行数据库级别验证.迁移:

 class DataBaseLevelValidation < ActiveRecord::Migration
  def change
    add_index :benefits_business_changes, [:benefit_id, :business_change_id], :unique => true
  end
end
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我尝试运行时,rake db:migration我有这个错误:

Index name 'index_benefits_business_changes_on_benefit_id_and_business_change_id' on table 'benefits_business_changes' is too long; 
the limit is 62 characters/Users/mariocardoso/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.5/lib/active_record/connection_adapters/abstract/schema_statements.rb:797:in `add_index_options'
Run Code Online (Sandbox Code Playgroud)

但如果我将名称更改为更短的版本,我会得到:

SQLite3::SQLException: no such table: main.benefits_businessc: CREATE UNIQUE INDEX "index_benefits_businessc_on_benefit_id_and_business_change_id" ON "benefits_businessc" 
Run Code Online (Sandbox Code Playgroud)

我怎样才能克服这个问题?

我看到的唯一方法是将"business_change"模型更改为更短的名称(模型,视图,迁移,......所有内容).

有没有办法运行此迁移而没有长名称引起的错误?

database ruby-on-rails rails-migrations ruby-on-rails-4

1
推荐指数
1
解决办法
2160
查看次数