Как использовать UserID, сгенерированный моделью User, сгенерированной Gem Devise, в качестве внешнего ключа в других моделях? - PullRequest
0 голосов
/ 15 октября 2018

Как установить связь между моделями в приложении, которое я пытаюсь создать.Планирование создания пользовательской модели с использованием devise gem.Каждый пользователь будет студентом или пациентом.Поэтому я планирую создать модель студента и модель пациента отдельно.Как связать пользовательскую модель с моделью студента, а пользовательскую модель с моделью пациента?

Модель пользователя: (Создано, как мне кажется, Devise Gem)

  • ID
  • Имя пользователя
  • Пароль

Модель студента:

  • ID (внешний ключ от модели пользователя)

  • Имя

  • Фамилия

  • StudentID

  • волонтерских часов

Модель пациента:

  • ID (внешний ключ от модели пользователя)

  • Имя пациента

  • Информация о пациенте

Имеет ли смысл моя схема?Пожалуйста, сообщите

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Итак, на самом деле ваш вопрос состоит из двух частей:

  1. Как использовать id из модели User в качестве внешнего ключа и
  2. Схема имеет смысл.

Что касается # 1 (на примере Student), ваша таблица students должна содержать поле user_id, и вы должны использовать ассоциацию belongs_to, что-токак:

# == Schema Information
#
# Table name: students
#
#  id                 :integer          not null, primary key
#  user_id            :integer
#

class Student < ActiveRecord::Base
  belongs_to :user

end

Что касается # 2, трудно сказать.На первый взгляд кажется правдоподобным иметь отдельные модели Student и Patient, учитывая, что существуют уникальные данные для каждой из них.Но есть несколько способов решения проблемы, и наиболее разумный из них зависит от ваших текущих и будущих требований.

0 голосов
/ 15 октября 2018

Модель пользователя: (Создано Devise Gem, я думаю)

ID
UserName
Password
FirstName
LastName
StudentID
Volunteer Hours
Info
is_student :boolean, default: false
is_patient :boolean, default: false

Итак, если пользователь учится, то для этого is_student будет истинным, а для пациента is_patient будет истинным

User.where(is_student: true) => Пользователь, являющийся студентом

User.where(is_patient: true) => Пользователь, являющийся пациентом

user.is_student? => true, если пользователь является студентом

user.is_patient? => true, если пользователь является пациентом

Чтобы включить студентов или пациентов в модель, это также можно сделать по объему

class User < ApplicationRecord
  scope :students, -> {where(is_student:true)}
  scope :patients, -> {where(is_patient:true)}
end
...