サインアップフォームに電子メール/パスワードとともに新しいフィールド「登録コード」を追加しようとしています。(私は別のデータベースに登録コードフィールドを持っています。有効な登録コード/電子メールのペアのみがサインアップで機能する必要があります)
devisegemによって実行されたアクションのコントローラーが見つかりませんでした。
これを実現するためにデバイスをカスタマイズするにはどうすればよいですか?
前もって感謝します。
サインアップフォームに電子メール/パスワードとともに新しいフィールド「登録コード」を追加しようとしています。(私は別のデータベースに登録コードフィールドを持っています。有効な登録コード/電子メールのペアのみがサインアップで機能する必要があります)
devisegemによって実行されたアクションのコントローラーが見つかりませんでした。
これを実現するためにデバイスをカスタマイズするにはどうすればよいですか?
前もって感謝します。
あなたの質問は基本的に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は、コントローラーを宝石の内部の舞台裏に置いています。アクションを追加または変更する場合は、アクションをサブクラス化し、ルートで少し作業を行って、アクションをコントローラーに取得する必要があります。
ただし、フィールドを追加するためにこれを行う必要はありません。goshakkkの答えを見る