我正在使用Rails4和Mongoid中的单表继承设计
Class User
#devise class
validates :email, :uniqueness => { :scope => :_type }
end
class Patient < User
end
class Doctor < User
end
class Hospital < User
end
如果我创建一个帐户作为医生,类型将是_type: "Doctor"
,那么如果他想创建一个帐户作为患者或医院,那么首先检查数据库是否已存在任何帐户类型的电子邮件然后只使用该帐户电子邮件使用以前的凭据创建帐户。
所以我不想在注册创建其他帐户类型时提供所有数据。
如何实现这种情况!!!请帮帮我......
答案 0 :(得分:0)
如果我是你,我不使用继承。我做这样的事情:
Class User
field :name
field :email
end
Class Patient
has_one :user
attr_accesor :email
field: disease
before_create do
existing_user = User.where( email: email ).first
if uxisting_user
user = uxisting_user
else
# you need create first an user
end
end
def name
user.name
end
end
现在如果用户已经存在,只需要用于搜索它的电子邮件字段,您就可以获得所有这些信息:
User.create( name: 'User1', email: 'user1@email.com' )
Patient.create( email: 'user1@email.com', disease: 'headache' )
Patient.first.name
=> "User1"
此外,如果您更改了用户信息,则会在患者中更改,其他类别也会更改。