PostgresSQL データベースに送信するフォームを開始し、検証を検証するためにモデルに対して多数のテストを実行しました。ただし、レガシー Oracle データベースをチェックして、エンド ユーザーがフォームで提供したライセンス番号がレガシー データベースに存在することを確認するカスタム バリデータを作成しました。コマンド ライン デバッガーを使用して、作成したライブラリがデータベースに接続して結果を返すこと、および条件が満たされない場合にカスタム バリデータによってモデルが無効になることを確認できます。ただし、モデルに対して単体テストを実行すると、テストの実行時にエラーが発生します。カスタム検証を削除すると、テストの実行に合格します。
PG::Error: ERROR: relation "LICENSE" does not exist
LINE 4: WHERE a.attrelid = '"LICENSE"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"LICENSE"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
私が見たところ、テストは、私が書いたライブラリで指定された Oracle データベースではなく、database.yml ファイルで指定された PostgresSQL データベースに対してカスタム検証を実行しようとしているように見えます。これが原因なのか、それが原因なのか、問題を解決する方法はよくわかりません。
私のライブラリファイルは次のようになります。
module Legacy
DB_CONFIG = YAML::load(File.open("#{Rails.root}/config/legacy_database.yml"))[Rails.env]
class Legacy::License < ActiveRecord::Base
establish_connection DB_CONFIG
self.table_name = "LICENSE"
self.primary_key = "LICENSE_ID"
end
end
これは私のモデルです:
require "#{Rails.root}/lib/legacy.rb"
class Vehicle < ActiveRecord::Base
belongs_to :user
validates_presence_of :permit_license, :name
validate :validate_license
def validate_license
license = Legacy::License.where('license_number = ?', license_number)
if license.empty?
errors.add(:license_number, 'License not valid')
end
end
end
なぜこれが起こっているのかについての洞察は役に立ち、感謝されます。