我有以下工廠:Rails的:獲取預先定義的特徵在工廠
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」'?或者,的確,只是「如果f.membership ==」接受「'? – Chowlett
剛剛通過並得到了相同的錯誤。 – nullnullnull
也運行「如果f.membership ==」接受「」,並引發語法錯誤。 – nullnullnull