0

RailsでForeignerを使用して外部キー制約を有効にしようとしています。開発用 DB で動作していますが、テストを実行しようとすると次のエラーが発生します。

Errors running test:units! #<ActiveRecord::StatementInvalid: Mysql2::Error: Can't create table 
'arizona_test.#sql-368_be' (errno: 150): ALTER TABLE `arizona_downloads` ADD CONSTRAINT 
`arizona_downloads_ibfk_1` FOREIGN KEY (`books_id`) REFERENCES `books`(id) ON DELETE SET NULL>

奇妙なことに、テストは正常に実行され、最後にこのエラーが発生します。

私が MySQL (および mysql2 アダプター) を使用していることに気づかずに、Foreigner がテスト DB に SQLite 構文を使用しようとしていると思われます。テストデータベースに MySQL を使用していることを Foreigner に伝える方法はありますか?

4

1 に答える 1

0

さらに詳しく見ると、これは MySQL errno 150 を示していることがわかります。実行すると次のようになりSHOW ENGINE INNODB STATUSました。

120808 11:24:29 Error in foreign key constraint of table arizona_test/#sql-368_6e:
 FOREIGN KEY (`book_id`) REFERENCES `books`(id) ON DELETE SET NULL:
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.

RailsのデフォルトのIDサイズに依存する移行により、schema.rbにはint(11)があるのに対し、私の開発環境はIDにbigint(20)を使用していたために発生していました。

これを解決するために、デフォルトの主キー列のタイプを変更し、移行をやり直しました。

于 2012-08-08T15:38:10.013 に答える