如何使用 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,这很难说。乍一看,有单独的Student
和Patient
模型似乎是合理的,因为每个模型都有唯一的数据。但是,有多种方法可以解决问题,哪一种最有意义,很大程度上取决于您当前和未来的需求。
【讨论】:
如果我将belongs_to添加到Student和Patient模型中,我将如何在User模型中定义has_one关联以上是关于如何使用 Devise gem 生成的 User 模型生成的 UserID 作为其他模型的外键?的主要内容,如果未能解决你的问题,请参考以下文章
Rails, Devise, Postmark Gem - 使用邮戳模板设计邮件
无法在 gem Devise 中调整控制器,ruby on rails 4
PostsController #index中的NameError