Rails App有3种不同类型的用户

我现在正处于应用的设计阶段。 主要是在纸上做一些事情来获得应用模型的洞察力,定义我需要的东西等等。 我发现有一个问题,我不知道如何解决,或者更具体,我不知道如何实现它以保持干燥。 所以这里是交易:

我有三个不同类型的用户/帐户的应用程序:

  1. 常规帐户 – 帐户在应用程序中具有基本权限的基本配置文件,具有常规帐户的用户可以查看每个人的公开个人资料,可以修改自己的个人资料,只能有1个个人资料图片,可以搜索等。

  2. 高级帐户 – 具有高级配置文件,这意味着用户可以指定联系信息,外观详细信息,有预订页面,可以获得优惠,有日历

  3. 公司帐户 – 包含公司简介,其中包含公司的联系信息,可以向高级用户提供报价,并可以浏览应用程序中的所有配置文件

基本上,我为所有用户提供了一个用户模型,我决定使用Devise进行身份validation。 创建用户后,我想向他/她显示一个他/她可以选择帐户类型的屏幕 – 常规,高级,公司。 之后,他/她将拥有系统中的适当权利以及适当的个人资料。 他将来无法在帐户类型之间进行更改。

我还要保持代码清洁干燥,我很难找到最好的解决方案。 现在我把头撞在墙上,因为我无法弄明白怎么做。 这是一个问题:

应该如何看待最终的模型图。 它应该是多态关联吗? 或者它应该只是一般:

class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable attr_accessible :email, :password, :password_confirmation, :remember_me, :account_type has_one :account has_one :entertainer has_one :company after_create :create_account def create_account if self.account_type == 'Advanced' self.entertainer = AdvancedAccount.create(user_id: self.id) elsif self.account_type = "Company" self.company = CompanyAccount.create(user_id: self.id) else self.account = RegularAccount.create(user_id: self.id) end end end 

或者我走错了路? 这件事的最佳做法是什么? 谢谢你的建议!

我没有为不同类型的用户管理单独的模型,而是发现cancan gem对于管理用户能力和授权非常有用。 我过去曾用这篇博文来设计它,尽管它现在可能已经过时了。

我会在您的UsersController中使用一些方法来定义各种访问级别,例如:

@user = is_advanced?

这样,您可以允许他们选择他们将拥有的帐户类型,将该选择存储在数据库[users::account_type: integer] 。 如果您决定添加该function,这将允许您在将来更改它们。

我不会在你的Users类中创建这么多的关联,因为它会使你的RESTfull路由变得臃肿,并使调试成为一场噩梦。