我正在尝试在注册表单中添加一个新字段“注册码”以及电子邮件/密码。(我在单独的数据库中有注册码字段,只有有效的注册码/电子邮件对才能与注册一起使用)
我无法为 devise gem 所做的操作找到任何控制器。
我如何定制设计来实现这一目标?
提前致谢。
我正在尝试在注册表单中添加一个新字段“注册码”以及电子邮件/密码。(我在单独的数据库中有注册码字段,只有有效的注册码/电子邮件对才能与注册一起使用)
我无法为 devise gem 所做的操作找到任何控制器。
我如何定制设计来实现这一目标?
提前致谢。
看来您的问题基本上与设计本身无关(除了观点)。要验证您的注册码/电子邮件对,您肯定需要将其添加为验证。
验证注册码的简单方法可能是:
class User
validate :validate_registration_code
private
def validate_registration_code
reg_code = RegistrationCode.find_by_code(registration_code)
unless reg_code.email == record.email
errors.add(:registration_code, "Invalid registration code for #{record.email}")
end
end
end
您可能还想编写简单的自定义验证器:
class RegistrationCodeValidator < ActiveModel::Validator
def validate(record)
# actual reg code validation
# might look like:
reg_code = RegistrationCode.find_by_code(record.registration_code)
unless reg_code.email == record.email
record.errors[:registration_code] << "Invalid registration code for #{record.email}"
end
end
end
# in your User model
class User
# include registration code validator
include RegistrationCodeValidator
validates_with MyValidator
end
Devise 将其控制器保留在 gem 的幕后。如果你想添加一个动作或修改一个动作,你必须继承它并在路由中做一些工作以将动作传递给你的控制器。
但是,您不需要这样做来添加字段。见goshakkk的回答