6

複数のデータベースを使用する Rails (v 3.1.3) アプリにテスト フィクスチャを追加しようとしています。フィクスチャは、アプリケーション独自のテスト sqlite データベースにのみ適用する必要があります。

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

他の 2 つのデータベースは mysql であり、%dbname%_test というテスト インスタンスもあり、既にテスト データが入力されています。

フィクスチャを追加した後、「ActiveRecord::StatementInvalid: Mysql::Error: Unknown column」エラーですべてのテストが失敗します。レールが mysql データベースの 1 つにフィクスチャを適用しようとしているからです。

フィクスチャが作成されたデータベースを指定する方法はありますか?

4

2 に答える 2

2

database.yml で、各環境の他の各データベースへの接続を追加します。

other_one_test:
  adapter: mysql
  # ...

other_two_test:
  # ...

other_one_development:
  # ...

other_two_development:
  # ...

他のデータベースを使用するモデルでは、次を使用してそれらに接続します

establish_connection("other_one_test")

おそらく、異なるデータベース接続ごとに Base クラス モデルを作成し、そのデータベースに接続するすべてのモデルにそれを使用することをお勧めします。

class OtherOneBase < ActiveRecord::Base
  establish_connection "other_one_#{Rails.env}"
end

class SomeModel < OtherOneBase
end

モデルを正しくセットアップすると、フィクスチャは正しいデータベースを使用します。

于 2011-12-02T05:33:02.213 に答える