2012-12-31 32 views
1

所以我有一個VendorUser。用戶可以具有多種角色之一:superadminadmin,vendor,user如何設置一種類型的用戶和模型之間的關係?

我的Vendor模型本質上是一個「商店」。

我希望角色爲vendor的用戶擁有模型Vendor的實例。但並非所有用戶都擁有Vendor型號的實例。

在我Vendor模型中,我有這樣的:

belongs_to :owner, :class_name => "User", 
    :foreign_key => "user_id" 

但我不知道做什麼用的User模型,因爲不是每個User都會有一個或有很多供應商。

我該如何解決這個問題?

回答

1

我建議您查看Ryan Bates的CanCan寶石,特別是this functionality。這應該可以幫助您在Vendor對象上建立角色和控制權限。

就協會而言,您仍然應該從用例的聲音中使用has_many vendors,然後控制來自控制器的訪問。

+0

我正在使用CanCan。但這是我有點不確定的協會。如果我做'has_many:vendors',那麼當用戶沒有分配'vendor'的時候會有什麼問題嗎? – marcamillion

+0

marcamillion,那太棒了,CanCan是一顆偉大的寶石。使用'has_many'關係應該沒有問題,即使關係在那裏用戶不需要有'vendor',它只意味着用戶有能力擁有'vendor'。這就是爲什麼您必須使用您在CanCan中建立的角色來控制訪問。希望這可以幫助! –

2

我會做這種方式:

User 

has_one :store 

Store 

belongs_to :user 

而只讓那些廠商的用戶進行存儲。在商店控制器中

before_filter :authenticate_vendor! 

def authenticate_vendor! 
    # redirect unless user is vendor 
end 
+0

與此相關的問題是,並非每個「用戶」都有一個商店。實際上,一些用戶不會有任何商店。一些用戶將在許多商店購物。 – marcamillion

+0

並非每個'用戶'都需要一個商店。他們*可以*有一個。對於搶購的人,我會有一種方法,通過在商店購買的物品抓取商店,並讓每件商品都屬於商店。 – AJcodez

+0

Yeh ...我有物品和商店關係很好。我認爲你們之間存在混淆,而且jason-truluck關於CanCan的建議可能是我需要的。 'has_one:vendor'是我可以配合的。 – marcamillion

相關問題