簡體   English   中英

自定義Devise gem(導軌)

[英]Customizing Devise gem (Rails)

我正在嘗試以注冊表格的形式添加新字段“注冊碼”以及電子郵件/密碼。 (我在單獨的數據庫中有注冊碼字段,只有有效的注冊碼/電子郵件對才可以進行注冊)

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

我如何定制設計來實現這一目標?

提前致謝。

看來您的問題基本上與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

Devise將其控制器保留在gem的幕后。 如果要添加或修改動作,則必須將其子類化,並在路由中做一些工作才能將動作發送到控制器。

但是,您不需要這樣做就可以添加字段。 查看goshakkk的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM