我正在尝试将测试装置添加到使用多个数据库的rails(v 3.1.3)应用程序中。 夹具应仅应用于应用程序自己的测试sqlite数据库:
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
另外两个数据库是mysql,并且还有名为%dbname%_test的测试实例,并且已经填充了测试数据。
在我添加了灯具之后,所有我的测试都失败了“ActiveRecord :: StatementInvalid:Mysql :: Error:Unknown column”错误,因为rails试图将灯具应用到 其中一个mysql数据库。
有没有办法指定为哪个数据库制作灯具?
答案 0 :(得分:4)
Fixtures-init代码(在activerecord-3.2.6 / lib / active_record / fixtures.rb中)有一个错误:在“initialize”方法中,在第544行的“else”中,@ connect需要初始化为@ model_class.connection。 (没有它,@ connect就是“连接”,它指向错误的数据库。)
答案 1 :(得分: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
如果您正确设置模型,您的灯具将使用正确的数据库。