我现在处于应用程序的设计阶段。主要是在纸上做一些事情来了解应用程序模型,定义我需要什么等等。我发现了一个问题,我不知道如何解决,或者更具体地说,我不知道如何实现它以保持干燥。所以这里是交易:
我有应用程序,其中将是三种不同类型的用户/帐户:
普通账户- 账户在应用程序中有基本的个人资料和基本权限,普通账户的用户可以看到每个人的公开个人资料,可以修改自己的个人资料,只能有一张个人资料图片,可以搜索等。
高级帐户- 具有高级配置文件,这意味着用户可以指定联系信息,外观详细信息,具有预订页面,可以获取报价,具有日历
公司帐户- 具有包含公司联系信息的公司资料,可以向高级用户提供报价,并可以浏览应用程序中的所有资料
所以基本上,我为所有用户提供了一个用户模型,我决定使用 Devise 进行身份验证。创建用户后,我想向他/她显示一个屏幕,他/她可以在其中选择帐户类型 - 常规、高级、公司。之后,他/她将在系统中拥有适当的权限以及适当的配置文件。他以后将无法在帐户类型之间进行更改。
我还想保持代码干净和干燥,我很难找到最好的解决方案。现在我把头撞在墙上,因为我不知道该怎么做。这是问题:
应该如何看待这个最终的模型图。它应该是多态关联吗?或者它应该是一般的:
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
还是我走错了路?这个问题的最佳做法是什么?感谢您的建议!