定制Devise gem(Rails)

时间:2012-05-31 12:45:22

标签: ruby-on-rails devise

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

我无法找到任何由devise gem完成的操作的控制器。

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

Devise将它的控制器保留在gem内部的幕后。如果要添加操作或修改操作,则必须对其进行子类化并在路径中执行一些操作以将操作传递给控制器​​。

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