Если вы хотите проверить, является ли конкретный пользователь врачом или инженером, вы можете добиться этого, создав отношения has_many
through
.
Итак, модель Profession
будет содержать все профессии, такие как врач, учитель, инженер и т. Д. Убедитесь, что их идентификаторы не меняются
В модели UserProfessionMapping
мы можем создавать области для фильтрации записей, относящихся к конкретным профессиям
В модели User
эти роли будут определять, является ли пользователь врачом или учителем.
class User < ApplicationRecord
# id
# email
# ..
has_many :user_profession_mappings
has_many :professions, through: :user_profession_mappings
def is_doctor?
self.user_profession_mappings.doctor.present?
end
def is_teacher?
self.user_profession_mappings.teacher.present?
end
end
class Profession < ApplicationRecord
# Only two columns - >
# id
# name
has_many :user_profession_mappings
has_many :users, through: :user_profession_mappings
# Doctor - id: 1
# Teacher - id: 2
# Engineer - id: 3
end
class UserProfessionMapping < ApplicationRecord
# only 2 columns ->
# user_id
# profession_id
belongs_to :user
belongs_to :profession
scope :doctor, -> {where profession_id: 1}
scope :teacher, -> {where profession_id: 2}
scope :engineer, -> {where profession_id: 3}
end
Чтобы добавить пользователя в профессию, вам нужно что-то вроде этого ->
doctor = Profession.find(1) # since id for doctor is 1
@user.professions << doctor
Теперь, чтобы проверить, является ли пользователь врачом, вы должны сделать
@user.is_doctor? # will give true
@user.is_teacher? # will give false
Для получения дополнительной информации ознакомьтесь с официальной документацией