0

我正在尝试在注册表单中添加一个新字段“注册码”以及电子邮件/密码。(我在单独的数据库中有注册码字段,只有有效的注册码/电子邮件对才能与注册一起使用)

我无法为 devise gem 所做的操作找到任何控制器。

我如何定制设计来实现这一目标?

提前致谢。

4

2 回答 2

1

看来您的问题基本上与设计本身无关(除了观点)。要验证您的注册码/电子邮件对,您肯定需要将其添加为验证。

验证注册码的简单方法可能是:

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-31T12:57:03.303 回答
0

Devise 将其控制器保留在 gem 的幕后。如果你想添加一个动作或修改一个动作,你必须继承它并在路由中做一些工作以将动作传递给你的控制器。

但是,您不需要这样做来添加字段。见goshakkk的回答

于 2012-05-31T13:31:41.533 回答