【问题标题】:Rails 3: has_and_belongs_to_many relationship being created, but can't be retrievedRails 3:has_and_belongs_to_many 关系正在创建,但无法检索
【发布时间】: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


    【解决方案1】:

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

    一些说明:你的问题没有说清楚,而且你的问题真的太长了,你应该在一个代码示例中用几行总结你的问题。

    【讨论】:

    • 任何清理问题的提示将不胜感激。
    • abeger:尽量减少代码示例并清楚地解释您的问题
    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多