【发布时间】:2013-01-17 16:20:29
【问题描述】:
我有以下工厂:
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>
更新后的代码如下:
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 }
f.after_build do |obj|
if obj.membership == "accepted"
obj.host = [true, false].sample
else
obj.host = false
end
end
end
end
【问题讨论】:
-
你试过
"#{f.membership}"吗?或者,事实上,只是if f.membership == "accepted"? -
刚刚运行它并得到了同样的错误。
-
还运行了 'if f.membership == "accepted"',并引发语法错误。
-
很公平,主要只是一个平底船。
-
不用担心。感谢您试一试!