0

サインアップフォームに電子メール/パスワードとともに新しいフィールド「登録コード」を追加しようとしています。(私は別のデータベースに登録コードフィールドを持っています。有効な登録コード/電子メールのペアのみがサインアップで機能する必要があります)

devisegemによって実行されたアクションのコントローラーが見つかりませんでした。

これを実現するためにデバイスをカスタマイズするにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

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
于 2012-05-31T12:57:03.303 に答える
0

Deviseは、コントローラーを宝石の内部の舞台裏に置いています。アクションを追加または変更する場合は、アクションをサブクラス化し、ルートで少し作業を行って、アクションをコントローラーに取得する必要があります。

ただし、フィールドを追加するためにこれを行う必要はありません。goshakkkの答えを見る

于 2012-05-31T13:31:41.533 に答える