Ruby on rails Rails应用程序有3种不同类型的用户

Ruby on rails Rails应用程序有3种不同类型的用户,ruby-on-rails,ruby-on-rails-3,database-design,activerecord,models,Ruby On Rails,Ruby On Rails 3,Database Design,Activerecord,Models,我现在正处于应用程序的设计阶段。主要是在纸上做一些事情,了解应用程序模型,定义我需要什么,等等。我发现了一个问题,我不知道如何解决,或者更具体地说,我不知道如何实现它以保持干燥。这就是交易: 我有一个应用程序,其中将有三种不同类型的用户/帐户: 普通帐户-帐户具有基本配置文件和应用程序中的基本权限,具有普通帐户的用户可以查看每个人的公共配置文件,可以修改自己的配置文件,只能有一张配置文件图片,可以搜索等 高级帐户-具有高级配置文件,这意味着用户可以指定联系人信息、外观详细信息、预订页面、获取优惠

我现在正处于应用程序的设计阶段。主要是在纸上做一些事情,了解应用程序模型,定义我需要什么,等等。我发现了一个问题,我不知道如何解决,或者更具体地说,我不知道如何实现它以保持干燥。这就是交易:

我有一个应用程序,其中将有三种不同类型的用户/帐户:

  • 普通帐户-帐户具有基本配置文件和应用程序中的基本权限,具有普通帐户的用户可以查看每个人的公共配置文件,可以修改自己的配置文件,只能有一张配置文件图片,可以搜索等

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

  • 公司帐户-具有公司档案,其中包含公司的联系信息,可以向高级用户提供服务,并可以浏览应用程序中的所有档案

  • 所以基本上,我的所有用户都有一个用户模型,我决定使用Desive进行身份验证。创建用户后,我想向他/她显示一个屏幕,他/她可以在其中选择帐户类型-常规、高级、公司。之后,他/她将在系统中拥有适当的权利,并拥有适当的个人资料。他将来将无法在帐户类型之间进行更改

    我还想保持代码的干净和干燥,我很难找到最好的解决方案。现在我把头撞在墙上,因为我不知道怎么做。 问题是:

    对于这一点,我们应该如何查看最终的模型图。它应该是多态关联吗?或者只是一般性的:

    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
    
    class用户
    还是我走错了路?这方面的最佳做法是什么?
    谢谢你的建议

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

    @user=高级吗?

    通过这种方式,您可以允许他们选择他们将拥有的帐户类型,并将该选择存储在数据库中
    [users::account\u type:integer]
    。如果您决定添加该功能,这将允许您在将来更改它们


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

    我发现gem对于管理用户能力和授权非常有用,而不是为不同类型的用户管理不同的模型。我过去用Desive设置它,但现在可能已经相当过时了。

    我建议您检查一下cancan:是一种优雅的方式,可以以一种非常枯燥的方式管理授权。是的,我知道,我对此很感兴趣,那么你的意思是最好的方式是使用单帐户模式,然后使用cancan来授权用户?是的,你可以这样做,只需定义不同的角色,就像你的案例中的“高级、公司、通用”一样。那么你认为我应该使用单帐户模式,只需使用cancan进行授权吗?