我有兩個factory_girl工廠,contact
和user
。聯繫有一個屬性,dest_user_id
,這是一個外鍵user
,但可以爲NULL。對於該屬性,我想創建一個使用user
工廠的新用戶,然後將其ID分配給dest_user_id
。有沒有辦法做到這一點?在工廠定義中,使用其他工廠的屬性分配屬性
0
A
回答
0
如果與dest_user_id
的外鍵保持與型號名稱相同,則不應改變方法。假設contact
belongs_to
user
和user
要麼has_one
或has_many
contacts
,你可以達到你想要的東西如下:
首先創建工廠:
FactoryGirl.define do
factory :user do
Field 1
Field 2
# etc
end
factory :contact do
# Add only the minimum fields required to create a contact, but not the association
Field 1
Field 2
factory :contact_with_user do
# then you add the association for this inherited factory
# we can use 'user' here as the factory is the same as the association name
user
end
end
end
使用此設置創建一個contact
沒有user
,因此dest_user_id
是NULL
當用戶FactoryGirl.create(:contact)
測試/規格內。
要創建user
和ID分配到dest_user_id
田野上contact
你可以使用下列內容:
@user = FactoryGirl.create(:user)
@contact = FactoryGirl.create(:contact_with_user, :user => @user)
這種方法最大的靈活性,你可以使用或不使用用戶創建一個contact
,和你只有在您需要進行特定測試時,纔可以將user.id
傳遞到聯繫人模型。如果你打電話FactoryGirl.create(:contact_with_user)
然後既是contact
和user
將自動創建,但你不會有,你有當您使用FactoryGirl.create(:contact_with_user, :user => @user)
相關問題
- 1. 如何使用此類別工廠填寫其他工廠的屬性category_id?
- 2. 工廠女孩的屬性
- 3. 頁面工廠屬性
- 4. 使用屬性作爲工廠方法
- 5. FactoryGirl在工廠中設置updated_at屬性
- 6. 請求工廠通用方法屬性
- 7. 從父母工廠女孩工廠訪問子屬性
- 8. Rspec:在其他工廠中使用工廠
- 9. 從angularjs工廠檢索對象屬性
- 10. 將屬性添加到抽象工廠
- 11. 工廠女孩多個嵌套屬性
- 12. angularjs工廠屬性是不可訪問
- 13. 將屬性傳遞給工廠方法
- 14. 工廠女孩嵌套屬性
- 15. DDD工廠和域對象屬性
- 16. 角js服務/工廠屬性行爲
- 17. 工廠模式,按屬性選擇
- 18. 在工廠方法中使用由<context:property-placeholder>定義的屬性
- 19. 工廠女孩,從屬工廠
- 20. 在Spring.Net中使用屬性作爲工廠方法
- 21. 如何指定所有工廠通用的屬性?
- 22. 有屬性分辨率的彈簧工廠bean
- 23. 使用硒屬性文件的頁面工廠技術
- 24. 環境 - 使用對其他屬性的引用在override_attributes中分配屬性
- 25. 工廠女孩使用多個替代屬性
- 26. 工廠在調用另一工廠的定義時失敗
- 27. 如何在工廠bean的工廠方法中定義參數
- 28. FactoryGirl RSpec創建工廠對象時沒有方法錯誤,其中工廠設置了該對象的屬性
- 29. 在Android中傳遞類屬性,如工廠模式活動
- 30. 使用屬性填充其他屬性
。這兩個型號之間的關聯的名稱超過
dest_user_id
轉讓的控制,描述了dest_user_id?爲了清晰起見,請張貼模型細節。 – nmott 2012-03-17 12:41:24我加了一個事實,即dest_user_id是一個外鍵。這有什麼關係?對於user的任何屬性,問題都是一樣的。 – FrontierPsycho 2012-03-17 14:29:50
只是想確保你沒有改變關係名稱和外鍵名稱,因爲它會稍微改變潛在的解決方案。可能的做法如下。 – nmott 2012-03-18 12:55:24