如何使用 Devise gem 生成的 User 模型生成的 UserID 作为其他模型的外键?

Posted

技术标签:

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

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

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

身份证 用户名 密码

学生模型:

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

名字

学生证

义工时间

患者模型:

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

患者姓名

患者信息

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

【问题讨论】:

如果它对您以及未来的 SO 搜索者有帮助,请随时接受/投票。 【参考方案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】:

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

    如何将User 模型中的id 用作外键,以及 您的架构是否有意义。

至于#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关联

以上是关于如何使用 Devise gem 生成的 User 模型生成的 UserID 作为其他模型的外键?的主要内容,如果未能解决你的问题,请参考以下文章

Rails, Devise, Postmark Gem - 使用邮戳模板设计邮件

无法在 gem Devise 中调整控制器,ruby on rails 4

PostsController #index中的NameError

Monkey patching Devise(或任何 Rails gem)

自动生成omniauth gem和路由

Rails:如何在 Rails 中为 Devise 设置密钥?