1

次の移行があります。

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)

4

2 に答える 2

-1

一意のインデックスに対応するには、application.rbのactive_record.schema_formatを変更する必要があります。

config.active_record.schema_format = :sql

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

この質問はOracleに対応していますが、他のデータベース固有の問題(この場合はMySqlの一意のインデックス)にも同じ問題があります。Railsschema.dbでインデックス定義が取得されないのはなぜですか。「#unrecognizedindex...」

于 2011-07-19T02:36:33.967 に答える