Ruby on rails Rails:在工厂中获取先前定义的特性

Ruby on rails Rails:在工厂中获取先前定义的特性,ruby-on-rails,factories,Ruby On Rails,Factories,我有以下工厂: FactoryGirl.define do factory :group_member do |f| f.user_id { rand(1..100) } f.group_id { rand(1..100) } f.membership { ["accepted", "invited", "declined", "requested", "denied", "left", "removed"].sample } if "#{membership

我有以下工厂:

FactoryGirl.define do
  factory :group_member do |f|
    f.user_id { rand(1..100) }
    f.group_id { rand(1..100) }
    f.membership { ["accepted", "invited", "declined", "requested", "denied", "left", "removed"].sample }
    if "#{membership}" == "accepted"
        f.host { [true, false].sample }
    else
        f.host false
    end

  end
end
该行:

if "#{membership}" == "accepted"
正在抛出错误:

Trait not registered: membership
我的目的是找出之前定义的特征“成员资格”是否设置为“已接受”。然而,我不确定如何访问该特征。有什么建议吗

另一方面,工厂创建类似于表单创建,因为有一个变量(在本例中为“f”)被赋予了各种特征。有没有一个词来描述这些类型的代码块

更新:我已将工厂更改为使用after_build调用,但现在出现以下错误:

undefined method `after_build=' for #<GroupMember:0x5dcb328>

Re:检查已设置的值。

f.after_build do |obj|   
  # Test your obj.membership here. 
end
Re:错误消息抱怨生成后
不存在。

f.after_build do |obj|   
  # Test your obj.membership here. 
end
您的定义语法看起来不正确。更改此项:

FactoryGirl.define do
  factory :group_member do |f|
为此:

FactoryGirl.define :group_member do |f|

您是否尝试过
“#{f.membership}”
?或者,事实上,如果f.membership==“accepted”
?只需运行它,并得到相同的错误。还运行了“if f.membership==“accepted””,并抛出一个语法错误。很公平,基本上只是一个赌注。不用担心。谢谢你试一试!我现在得到一个与生成后相关的错误。你介意阅读我上面的更新吗?你用的是什么版本的FactoryGirl?回调不是最前沿的,但它们在一开始也不存在。我在master 4.1.0上。我将检查文档,看看回调是否已更改。FactoryGirl的语法似乎已更改。现在应该是“f.after(:build)do | obj”。这种方法既适用于我的原始语法,也适用于您刚才推荐的更简洁的语法。