我正在尝试添加一个新的字段“注册码”以及注册表单中的电子邮件/密码。(我在一个单独的数据库中有注册码字段,只有有效的注册码/电子邮件对才能进行注册)
我找不到devise gem所做的动作的任何控制器。
我如何定制devise来实现这一点?
提前谢谢。
发布于 2012-05-31 20:57:03
看起来你的问题基本上与设计本身无关(除了观点)。要验证您的注册码/电子邮件对,您肯定需要添加此验证。
验证注册码的简单方法可能是:
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发布于 2012-05-31 21:31:42
Devise将其控制器放在gem内部的幕后。如果您想要添加或修改一个操作,您必须将其子类化,并在路由中做一些工作,以便将操作传递给控制器。
但是,添加字段时不需要这样做。见goshakkk的答案
https://stackoverflow.com/questions/10833902
复制相似问题