Ruby on rails schema.rb不包括:添加索引时唯一

Ruby on rails schema.rb不包括:添加索引时唯一,ruby-on-rails,rails-migrations,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.do

我有以下迁移:

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
我做错什么了吗


(Rails 3.0.8,MySql2 gem)

为了适应唯一索引,您需要更改application.rb中的活动\u record.schema\u格式:

config.active_record.schema_format = :sql
这将迫使测试数据库使用db/development_structure.sql,它从数据库中获取原始sql语句,而不是ruby命令


这个问题涉及Oracle,但对于其他特定于数据库的问题(在本例中为MySql唯一索引)也存在相同的问题:

请自己尝试一下

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

事实并非如此。我们的schema.rb中确实有许多唯一的索引,并且仍然使用rails模式格式。注意OP使用MySQL。
add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], unique: true, name: 'cv_unique_composite'