1

我正试图让 FactoryGirl 中的关联发挥作用,而他们只是……没有。我基本上得到了这个:

class Foo
  include Mongoid::Document

  belongs_to :bar
end

class Bar
  include Mongoid::Document

  has_many :foos
end

FactoryGirl.define do
  factory :foo, class => Foo do
    bar
  end

  factory :bar, class => Bar do
  end
end

至少文档让我相信……但是在我的测试中,我有

a_foo=FactoryGirl.create :foo
a_foo.bar # Hooray! It's an associated object
Foo.where( _id: a_foo._id ).includes( :bar ).first.bar # This is nil!

为什么最后一行的关联值为零?我不需要它,因为正在测试的实际代码做同样的事情,并且它有权期望它工作......我错过了为什么这不能正常工作?也许与急切加载有关?

4

1 回答 1

0

您的代码实际上适用于 FactoryGirl 4.2.0、Mongoid 3.0.9。但是当我在禁用 identitymap 的情况下运行 mongoid 时遇到了类似的问题(这是默认行为)。如果没有 identitymap,您可以在数据库中有两个不同的 ruby​​ 对象表示同一个文档,彼此不同步。因此,例如,如果您autosave关闭,这可能会导致您看到的问题。

尝试自己将您的简化代码粘贴到 rails 控制台——如果它有效,那么您可能在配对真实代码时改变了一些重要的东西。(很抱歉指出了明显的问题,但是您的工厂代码中有语法错误这一事实让我认为您实际上并没有测试您的示例代码。)

于 2013-04-19T20:00:15.990 回答