简短版本:
我有一个Rails 3.2.1.4单元测试,试图在外部数据库中创建一个新的多对多关系。关系已创建,但我无法通过ActiveRecord来检索它。
长版:
我有一个与外部MySQL数据库交互的Rails 3.2.1.4项目,该数据库有两个表,这些表通过传统的连接表具有多对多关系。
我有一个测试,可以在现有数据上创建新关系但无法检索关系。这是失败的测试:
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
答案 0 :(得分:0)
我认为这是因为您在测试中使用静态ID,例如尝试use fixtures。
一些评论:你没有明确说明你的问题,你的问题实在太长了,你应该在一个代码示例中用几行总结你的问题。