1

我有以下迁移:

class UniqueIndexOnCustomValueKeys < ActiveRecord::Migration
  def self.up
    add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], {:unique=>true,:name=>:cv_unique_composite} 
  end

  def self.down
    remove_index :custom_values, :cv_unique_composite
  end
end

当我运行迁移时,它会在开发数据库中正确创建 UNIQUE 键,但是当我查看时schema.rb, :unique 标志不存在。这导致测试数据库没有唯一索引。

schema.rb 中的结果行如下所示:

add_index "custom_values", ["customizable_id", "customizable_type", "custom_definition_id"], :name => "cv_unique_composite"

我在这里做错了吗?

(Rails 3.0.8,MySql2 gem)

4

2 回答 2

0

为你的 self.up 试试这个:

add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], unique: true, name: 'cv_unique_composite'
于 2017-09-18T15:59:45.133 回答
-1

为了适应唯一索引,您需要更改 application.rb 中的 active_record.schema_format:

config.active_record.schema_format = :sql

这将强制测试数据库使用 db/development_structure.sql 从数据库中获取原始 sql 语句而不是 ruby​​ 命令。

此问题针对 Oracle,但对于其他数据库特定问题(在本例中为 MySql 唯一索引)也存在相同问题:为什么我在 Rails schema.db 中没有得到任何索引定义 - “# unrecognized index ...”

于 2011-07-19T02:36:33.967 回答