2012-08-07 64 views
4

我正在構建一個具有多個角色的Rails應用程序。我不能對用戶模型使用繼承,因爲每個角色都有非常不同的屬性和行爲(即 - 登錄後有不同的頁面訪問和功能)。所以我決定爲每個角色(即客戶,服務提供商,客戶代表等)建立單獨的模型。如何爲多個角色構建關聯?

這項工作的協會如何?我想出了以下內容,但Role類對我來說看起來很糟糕。如果用戶可以擁有多個角色,那麼它就不會那麼糟糕,但由於他們只有一個角色,我必須在Role中編寫自定義驗證,以確保只選擇了一個角色。你們有什麼感想?

class User < ActiveRecord::Base 
    has_one :role 
end 

class Role < ActiveRecord::Base 
    has_one :customer 
    has_one :service_provider 
    has_one :customer_representative 
end 

class Customer < ActiveRecord::Base 
end 

class ServiceProvider < ActiveRecord::Base 
end 

class CustomerRepresentative < ActiveRecord::Base 
end 
+0

我也是在試圖創建色器件多個模型之中,但是這導致了一下多種模式之間重複的代碼。 – 2012-08-07 19:45:37

回答

5

我認爲這裏的問題是與你的「角色」模型。角色實際上並不是物理事物,而是其他對象應該遵守的界面。因此,它具有多態關係。

class User < ActiveRecord::Base 
    belongs_to :role, polymorphic: true 
end 

class Customer < ActiveRecord::Base 
    has_one :user, as: :role 
end 

class ServiceProvider < ActiveRecord::Base 
    has_one :user, as: :role 
end 

class CustomerRepresentative < ActiveRecord::Base 
    has_one :user, as: role 
end 

然後你需要添加role_idrole_type到您的用戶表。

這應該得到你想要的我相信。

+1

喬我發現這個超級有用。你能告訴我如何創建和訪問這些角色嗎? – JonathanSimmons 2013-01-26 05:27:47