【发布时间】:2025-12-06 12:20:08
【问题描述】:
我们在 Rails API 中使用 Devise,并有一个包含 NAME 和 EMAIL 以及其他常用注册信息的用户表。我们还有一个 Tutor profile 表,它与用户是 one_to_one 关系。我们想要的是,当新用户注册时,来自个人用户记录的 NAME 和 EMAIL 会自动填充他们的 Tutor 个人资料表作为默认值。这是我们的导轨模型。任何帮助将不胜感激。谢谢!! :-)
class Tutor < ApplicationRecord
# delegate :email, :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
belongs_to :user
end
class User < ApplicationRecord
has_one :tutor#, dependent: :destory
after_create :init_tutor
# accepts_nested_attributes_for :tutor
# delegate :email, :email=, to: :tutor
def init_tutor
self.create_tutor
end
def generate_jwt
JWT.encode({ id: id,
exp: 60.days.from_now.to_i },
Rails.application.secrets.secret_key_base)
end
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
# validates :fullname uniqueness: { case_sensitive: false }, presence: true #, allow_blank: false, format: { with: /\A[a-zA-Z0-9]+\z/ }
end
【问题讨论】:
-
您似乎在 Tutor 模型中尝试了
delegate :email, :email=, to: :user。这是正确的做法。它没有工作吗?尝试将belongs_to :user放在委托声明之前。 -
当没有设置特定的导师姓名和电子邮件时,您想使用用户的姓名和电子邮件作为后备吗?还是应该两个值始终相同?
标签: ruby-on-rails ruby database api