2016-02-06 81 views
-1

有時attributes_for策略返回不必要的屬性,換句話說,如果我們需要幾個屬性是什麼,而不是返回所有的人:FactoryGirl:忽略屬性,而不需要創建額外的工廠

FactoryGirl.define do 
    factory :user do 
    name { FFaker::Name.name } 
    nickname { FFaker::Name.suffix } 
    email { FFaker::Internet.email } 

    factory :special_user do 
     provider 'email' 
     confirmed_at Time.now.strftime('%F %T') 
    end 

    trait :confirmation do 
     current_password 'secret098' 
     password 'secret567' 
    end 

    trait :valid do 
     password_confirmation 'secret567' 
    end 

    trait :invalid do 
     password_confirmation 'secret568' 
    end 
    end  
end 

有必要使用具有特徵的工廠,但是是否有可能僅返回current_passwordpasswordpassword_confirmationattributes_for()不適用於特徵。或者也許有另一種方式來做到這一點?

+2

我不完全明白你想要做什麼或什麼不工作。就你上面的例子來說,你能給你的例子'attributes_for'調用,它返回什麼,以及你希望它返回什麼?一般情況下,traits屬性不會很好,不是嗎?使用有意義的模型名稱/屬性而不是foo/bar/baz(正如您開始使用user/special_user一樣)也可以使示例更易於理解。 – jrochkind

+0

聽起來好像你想要從他們定義的工廠中分別訪問特徵,而這不是他們設計的工作方式。 – sevenseacat

+0

@sevenseacat我知道,但也許有其他方法來過濾atrributes不知何故? – DreamWalker

回答

2

attributes_for會返回一個屬性的哈希值,所以你可以選擇你想要的那個哈希值。

例如。

FactoryGirl.attributes_for(:user, :confirmation) 
    .slice(:current_password, :password_confirmation) 
+0

謝謝,我知道我可以做到這一點。其實我想知道是否可以在工廠一級做。 – DreamWalker

相關問題