2011-06-20 51 views
1

獨特的,我有以下遷移:schema.rb不包括:對add_index

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 

當我運行遷移,它創建唯一鍵適當的開發數據庫,​​但是當我看到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寶石)

回答

-1

爲了適應唯一索引,你需要改變active_record.schema_format在application.rb中:

config.active_record.schema_format = :sql 

這將迫使測試數據庫使用從數據庫取代原始sql語句而不是ruby命令的db/development_structure.sql。

這個問題解決了甲骨文,但對於其他數據庫的具體問題存在同樣的問題(在這種情況下,MySQL的唯一索引):Why am I not getting any index defintions in my Rails schema.db - "# unrecognized index ..."

+0

這是不真正。我們的schema.rb中有許多獨特的索引,並且仍然具有rails架構格式。請注意,OP使用MySQL。 – radiospiel

0

試試這個你self.up:

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