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"

Кроме того, если вы измените информацию о пользователе, она будет изменена в "Пациенте" и то же самое для других классов.

Другие вопросы по тегам