Rails 3:has_and_belongs_to_many关系正在创建,但无法检索

时间:2013-11-27 16:17:23

标签: mysql ruby-on-rails unit-testing activerecord

简短版本:

我有一个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

1 个答案:

答案 0 :(得分:0)

我认为这是因为您在测试中使用静态ID,例如尝试use fixtures

一些评论:你没有明确说明你的问题,你的问题实在太长了,你应该在一个代码示例中用几行总结你的问题。