[英]Connecting to 2 databases during unit testing results in error
我已经启动了一个提交给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
从我的角度来看,似乎测试正在尝试针对在database.yml文件中指定的PostgresSQL数据库而不是在我编写的库中指定的Oracle数据库运行自定义验证。 我不太确定这是原因还是原因,以及如何解决该问题。
这是我的库文件的样子:
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
对于为什么发生这种情况的任何见解都将有所帮助并受到赞赏。
我认为这是配置两个数据库的方式。 我有一个类似的情况,传统数据库与基于Rails ActiveRecord的数据库混合在一起。 (在我的情况下是SQLServer和mysql)
这是我的配置方式。 (仅显示发展情况):
config / database.yml:
aimdevelopment:
adapter: sqlserver
....
development:
adapter: mysql2
.....
我的旧系统称为AIM
然后,为所有我的旧模型创建一个基础模型:
型号/aim.rb:
class Aim < ActiveRecord::Base
establish_connection ("aim#{Rails.env}")
end
然后,如果我需要连接到旧数据库中的表
class Product < AIM
self.table_name 'Product'
self.primary_key 'ProductID'
end
我认为,当您尝试管理模块中的“ Establishment_connection”时,您已经绕过了rails,这可能是您的不便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.