Ruby on rails 定制Desive gem(导轨)

Ruby on rails 定制Desive gem(导轨),ruby-on-rails,devise,Ruby On Rails,Devise,我正在尝试在注册表单中添加一个新字段“注册码”以及电子邮件/密码。(我在一个单独的数据库中有注册码字段,只有有效的注册码/电子邮件对才能用于注册) 我找不到Desive gem执行操作的任何控制器 我该如何设计来实现这一点 提前感谢。看来你的问题基本上与设计本身无关(除了视图)。要验证您的注册码/电子邮件对,您肯定需要将其添加为验证 验证注册码的简单方法可以是: class User validate :validate_registration_code private def

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

我找不到Desive 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
类注册CodeValidatorrecord.errors[:registration\u code]designe将其控制器隐藏在gem的幕后。如果你想添加一个动作或修改一个动作,你必须对它进行子类化,并在路由中做一些工作,以将动作发送到你的控制器


但是,添加字段时不需要这样做。见戈沙克的答案

谢谢戈沙克。。就是这样。。我还学会了如何使用这样的模型。。再次感谢你。。!!!没问题:)很高兴我的回答有帮助。