schema.rb不包括:add_index上的unique

时间:2011-06-20 15:00:46

标签: ruby-on-rails rails-migrations

我有以下迁移:

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标志。这导致测试数据库没有UNIQUE索引。

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

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

我在这里做错了吗?

(Rails 3.0.8,MySql2 gem)

2 个答案:

答案 0 :(得分:0)

试试这个你的自我。

add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], unique: true, name: 'cv_unique_composite'

答案 1 :(得分:-1)

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

config.active_record.schema_format = :sql

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

此问题涉及Oracle,但其他数据库特定问题(在本例中为MySql Unique Indexes)存在同样的问题:Why am I not getting any index defintions in my Rails schema.db - "# unrecognized index ..."