Ruby on rails 尝试在另一个对象之前创建对象时FactoryGirl出错

Ruby on rails 尝试在另一个对象之前创建对象时FactoryGirl出错,ruby-on-rails,ruby-on-rails-3.2,factory-bot,Ruby On Rails,Ruby On Rails 3.2,Factory Bot,我正在尝试创建一个名为global_list的模型。它将获取一个与用户关联的列表和一个与项目关联的全局_id。我需要创建一个用户(在此对象的回调中创建一个列表)和一个项(其中创建一个全局_标识作为对项创建的回调)。以下两种解决方案都无法在以前尝试创建这些关联对象。应该吗?有没有更好的方法来处理这个问题?我曾尝试为喜欢的项目列表id创建访问器,但也没有成功 FactoryGirl.define do factory :global_list do before(:create) {

我正在尝试创建一个名为global_list的模型。它将获取一个与用户关联的列表和一个与项目关联的全局_id。我需要创建一个用户(在此对象的回调中创建一个列表)和一个项(其中创建一个全局_标识作为对项创建的回调)。以下两种解决方案都无法在以前尝试创建这些关联对象。应该吗?有没有更好的方法来处理这个问题?我曾尝试为喜欢的项目列表id创建访问器,但也没有成功

FactoryGirl.define do
  factory :global_list do
    before(:create) {
       user=FactoryGirl.create(:user)
       mi=FactoryGirl.create(:item)
    }
    list_id user.liked_list_id
    global_id mi.global_id
  end
end
街区有帮助吗

FactoryGirl.define do
  factory :global_list do
    before(:create) {
      user=FactoryGirl.create(:user)
      mi=FactoryGirl.create(:item)
    }

    list_id { List.first.id }
    global_id { 3 } # 3 will be created at this point { mil.global_id } doesn't work
  end
end
我开始认为这在工厂女孩身上是不可能的。如果有任何帮助,我们将不胜感激

试试这个

   FactoryGirl.define do
      factory :global_list do
        before(:create) { |list|
           user=FactoryGirl.create(:user)
           mi=FactoryGirl.create(:item)
           list.list_id = user.liked_list_id
           list.global_id = mi.global_id
        }
      end
    end

它完全未经测试

这在FactoryGirl中是完全可能的,而且实际上经常使用

在工厂中定义关联对象很简单,如下所示。不需要“以前”的幻想

使用上述代码,FactoryGirl将首先创建所需的关联对象,并使用其id自动创建此对象。

这样做了:

FactoryGirl.define do
  factory :global_list do
    list_id { FactoryGirl.create(:user).liked_list_id }
    global_id { FactoryGirl.create(:item).global_id }
  end
end

在这种情况下,Ruby的块令人困惑。所以我问:

嗯。。。听起来不错,但我通过
user.liked_items_list.id
返回此列表;我有一个用于喜欢的项目列表的属性读取器,但我得到一个错误
/Users/jt/repos/src/spec/factories.rb:91:in
块(2层)in::未定义的方法
喜欢的项目列表(NoMethodError)
;我知道这变得非常具体,但…不幸的是,我似乎必须传回对象并将其分配给值。请列出所有涉及的模型以及关联代码,以及您可以在控制台或真实代码中执行的步骤,以达到您的目标。thx Billy,我想我可能问得不好。这是一个有点复杂的模型关系,我在回调中创建了一个代理对象。我问了第二个问题,试图帮助我在头脑中澄清这一点。
FactoryGirl.define do
  factory :global_list do
    list_id { FactoryGirl.create(:user).liked_list_id }
    global_id { FactoryGirl.create(:item).global_id }
  end
end