2011-10-17 47 views
2

我有一個CanCan'角色'模型的Rails應用程序。角色有一個「名稱」字段,可以掃描調用以確定用戶的權限級別。Factory_Girl&CanCan:避免唯一性錯誤

在工廠女孩,我有很多與'角色'字段關聯的模型;一些很深的迭代。例如:('帳戶'工廠與'採購'工廠有關聯,與'用戶'工廠有關聯,與'角色'有關聯)

問題是,如果我打電話給兩個最終與'角色'關聯的工廠,第二個被調用的工廠將無法對該角色進行唯一性驗證 - >'名稱'字段。通常,唯一性驗證不是問題 - 我只是將有問題的屬性設置爲序列...但我無法在此處完成此任務 - 角色的名稱必須專用於cancan功能。

那麼......我該如何解決這個問題?

回答

1

您可以預先創建所有角色,然後根據需要在測試中查看它們嗎?

如果不是,您是否可以在特定測試中創建需要的角色,然後將其傳遞到工廠?

admin_role = Factory.create(:role, :role_name => "administrator") 
Factory.create(:user, :login => "joe", :role => admin_role) 
Factory.create(:user, :login => "jane", :role => admin_role) 
+0

歡呼聲回覆。可能是的,但是很多工廠都是深嵌的。因此,例如,如果我想創建一個「註冊」工廠,則必須創建一個角色工廠,然後創建一個角色集的用戶工廠,然後創建一個用戶設置的採購工廠,然後創建該採購的註冊組。 – PlankTon

+0

嗯,如果你有一個角色列表,並且當一個角色被創建時它會將'.pop'從列表中刪除?或者如果你只是在你的'Factories.rb'中編寫一個方法(而不是工廠),在必要時(在工廠)返回相關角色以防止重複? – jefflunt

+0

像這裏提到的解決方案(http://stackoverflow.com/a/7213281/241232)可能會適合需要。唯一的問題是,開發人員需要記住在定義需要角色的新工廠時使用該方法。 – BBonifield