2011-06-20 9 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フラグはありません。これにより、テストデータベースにUNIQUEインデックスが設定されていません。

schema.rbでの結果の行は次のようになります。

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

私はここで何か間違ったことをやっていますか?

(Railsの3.0.8、MySql2宝石)

答えて

-1

一意索引に対応するために、あなたはapplication.rbにactive_record.schema_formatを変更する必要があります。

config.active_record.schema_format = :sql 

これは、テスト・データベースを強制しますrubyコマンドの代わりにデータベースから生のSQL文を取るdb/development_structure.sqlを使用する。

この質問は、Oracleに対処しますが、同じ問題が他のデータベース固有の問題(この場合はMySQLのユニークインデックス)のために存在する:Why am I not getting any index defintions in my Rails schema.db - "# unrecognized index ..."

+0

されていないこと本当。 schema.rbには独自のインデックスがいくつかありますが、それでもなおスキーマ形式があります。 OPはMySQLを使用しています。 – radiospiel

0

は、あなたのするself.upのためにこれを試してみてください。

add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], unique: true, name: 'cv_unique_composite' 
関連する問題