Devise(STI) создает учетную запись другого типа, используя свои предыдущие учетные данные
Я использую devise с наследованием одной таблицы в 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"
затем, если он хочет создать учетную запись в качестве пациента или больницы, сначала проверьте базу данных, если электронная почта уже существует с любым типом учетной записи, а затем просто с помощью этого электронного сообщения создайте учетную запись с предыдущими учетными данными.
Поэтому я не хочу предоставлять все данные при регистрации для создания аккаунта другого типа.
Как добиться этого сценария!!! Пожалуйста, помогите мне......
1 ответ
На твоем месте я не использую наследование. Я делаю что-то вроде этого:
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"
Кроме того, если вы измените информацию о пользователе, она будет изменена в "Пациенте" и то же самое для других классов.