如何将由Devise gem生成的User模型生成的UserID用作其他模型中的外键?

时间:2018-10-15 05:11:10

标签: ruby-on-rails model devise

如何在我要创建的应用程序中的模型之间建立连接。计划使用devise gem生成用户模型。每个用户将是学生或患者。因此,我计划分别创建学生模型和患者模型。如何将用户模型链接到学生模型并将用户模型链接到患者模型?

用户模型:(我猜是由Devise Gem创建的)

  • ID
  • 用户名
  • 密码

学生模型:

  • ID(用户模型中的外键)

  • 名字

  • 姓氏

  • 学生ID

  • 志愿者时间

患者模型:

  • ID(用户模型中的外键)

  • 患者姓名

  • 患者信息

我的模式有意义吗? 请指教

2 个答案:

答案 0 :(得分:2)

用户模型:(我猜是由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

答案 1 :(得分:1)

因此,您的问题实际上包括两部分:

  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,这很难说。乍一看,考虑到每个模型都有唯一的数据,似乎有可能分别使用StudentPatient模型。但是,有多种方法可以解决该问题,哪种方法最有意义取决于您当前和将来的需求。