【发布时间】:2013-11-27 16:17:22
【问题描述】:
简短版:
我有一个 Rails 3.2.1.4 单元测试,它试图在外部数据库中创建一个新的多对多关系。关系已创建,但我无法让 ActiveRecord 检索它。
长版:
我有一个 Rails 3.2.1.4 项目正在与外部 MySQL 数据库交互,该数据库具有两个通过常规连接表具有多对多关系的表。
我有一个测试可以在现有数据上创建新关系,但无法检索该关系。这是失败的测试:
class ExternalTest < ActiveSupport::TestCase
def setup
@foo_id = 1
@foo = ExternalAsset.find(@foo_id)
end
test "subjects attach correctly"
@foo.external_subjects << ExternalSubject.find(2)
assert_equal 1, ExternalAsset.find(@foo_id).external_subjects.count
end
end
更令人沮丧的是,在控制台中添加和查询几乎与此完全相同的代码的多对多关系可以正常工作。
我已经用谷歌搜索了这个活生生的东西,结果一无所获。我最好的猜测是,这是 ActiveRecord、外部数据库连接和测试框架的某种怪异交互。
这是我正在处理的模型:
class ExternalAsset < ActiveRecord::Base
establish_connection "external_#{Rails.env}"
self.table_name = :assets
has_and_belongs_to_many :external_subjects, :join_table => :assets_subjects,
:association_foreign_key => :subject_id, :foreign_key => :asset_id
end
class ExternalSubject < ActiveRecord::Base
establish_connection "external_#{Rails.env}"
self.table_name = :subjects
has_and_belongs_to_many :external_assets, :join_table => :assets_subjects,
:association_foreign_key => :asset_id, :foreign_key => :subject_id
end
【问题讨论】:
标签: mysql ruby-on-rails unit-testing activerecord