2013-01-17 26 views
2

我有以下工廠: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 
+0

您是否嘗試過' 「#{} f.membership」'?或者,的確,只是「如果f.membership ==」接受「'? – Chowlett

+0

剛剛通過並得到了相同的錯誤。 – nullnullnull

+0

也運行「如果f.membership ==」接受「」,並引發語法錯誤。 – nullnullnull

回答

2

回覆:檢查已設置的值。

f.after_build do |obj| 
    # Test your obj.membership here. 
end 

回覆:該錯誤消息抱怨after_build不存在。

您的定義語法看起來不對。更改此:

FactoryGirl.define do 
    factory :group_member do |f| 

這樣:

FactoryGirl.define :group_member do |f| 
+0

我現在正在收到與after_build有關的錯誤。您介意閱讀我上面的更新嗎? – nullnullnull

+0

您使用的是什麼版本的FactoryGirl?回調沒有出血的邊緣,但他們一開始也沒有。 – jdl

+0

我在主人,4.1.0。我會檢查文檔以查看回調是否已更改。 – nullnullnull