【问题标题】:How to use the UserID generated by User model generated by Devise gem as foreign key in other models?如何使用 Devise gem 生成的 User 模型生成的 UserID 作为其他模型的外键?
【发布时间】:2019-03-19 11:42:19
【问题描述】:

如何在我尝试创建的应用程序中的模型之间建立连接。计划使用 devise gem 生成用户模型。每个用户要么是学生,要么是患者。所以我打算分别创建学生模型和患者模型。如何将用户模型链接到学生模型,将用户模型链接到患者模型?

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

  • 身份证
  • 用户名
  • 密码

学生模型:

  • ID(来自用户模型的外键)

  • 名字

  • 学生证

  • 义工时间

患者模型:

  • ID(来自用户模型的外键)

  • 患者姓名

  • 患者信息

我的架构有意义吗? 请指教

【问题讨论】:

  • 如果它对您以及未来的 SO 搜索者有帮助,请随时接受/投票。

标签: ruby-on-rails model devise


【解决方案1】:

用户模型:(我猜是由 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? => 如果用户是学生则为真

user.is_patient? => 如果用户有耐心则为真

要在模型中获取学生或患者,也可以按范围完成

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

【讨论】:

    【解决方案2】:

    所以,你的问题实际上有两个部分:

    1. 如何将User 模型中的id 用作外键,以及
    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 模型似乎是合理的,因为每个模型都有唯一的数据。但是,有多种方法可以解决问题,哪一种最有意义,很大程度上取决于您当前和未来的需求。

    【讨论】:

    • 如果我将belongs_to添加到Student和Patient模型中,我将如何在User模型中定义has_one关联
    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 2019-03-26
    • 2012-07-07
    相关资源
    最近更新 更多