Rails API使用Devise时如何自动将用户表数据填充到关联Tutor表
解决方案
你只需要调整模型代码即可实现需求,具体修改如下:
方案1:Tutor表单独存储name、email字段
首先确保你的tutors表已经添加了name和email字段,没有的话先执行迁移生成命令:rails g migration AddNameAndEmailToTutors name:string email:string rails db:migrate然后修改User模型的
init_tutor方法,创建关联Tutor时传入用户的对应字段值:class User < ApplicationRecord # 修正拼写错误:destroy而非destory has_one :tutor, dependent: :destroy after_create :init_tutor def init_tutor # 创建Tutor时传入user的name、email作为默认值 self.create_tutor(name: self.name, email: self.email) end # 其余原有代码保持不变 # ... end方案2:不冗余存储字段,通过委托直接读取User表数据
如果你不需要单独修改Tutor侧的name、email(默认和关联用户完全一致),可以不用在tutors表加字段,直接启用你之前注释掉的委托逻辑即可:class Tutor < ApplicationRecord belongs_to :user # 打开委托配置,直接调用tutor.name、tutor.email即可读取关联用户的对应属性 delegate :name, :email, to: :user after_initialize :set_defaults def set_defaults self.image_url ||= "https://cdn.icon-icons.com/icons2/1378/PNG/512/avatardefault_92824.png" self.bio ||= "" end end可选优化
如果后续有允许Tutor自定义name/email的需求,同时需要默认和用户注册信息一致,可以结合两种方案:Tutor表添加对应字段,创建时传默认值,后续允许单独修改即可。
内容的提问来源于stack exchange,提问作者Michael McLoughlin
相关产品推荐
相关产品推荐

