我有以下迁移:
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)
答案 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 ..."