ユーザーが正しいSMSコードを入力したかどうかを確認するカスタムバリデータがあります。ユーザーが間違ったコードを入力すると、失敗した試行をログに記録し、コードごとに3回の再試行を制限する必要があります。バリデータ内のインクリメントフィールド
フィールドがインクリメントされていない次のバリデータを作成しました。
def token_match
if token != User.find(user_id).verification_token
User.find(user_id).increment!(:verification_fails)
errors.add(:sms_code, "does not match")
end
end
エラーは、前のステートメントがロールバックされるとすぐに問題になります。 errors.add行をコメントアウトするとインクリメントは機能しますが、上位レベルの検証は実行されません。
あなたがバリデータを乱用しています。このチェックには使用しないでください。モデルの簡単な方法を使用してください。 – meagar
ありがとうございます。レコードを保存する前にビジネスロジックを満足させる必要がある場合はどうすればよいですか?必要な唯一の妥当性検査は存在です:しかし、ユーザーが既に3回失敗した場合、レコードは更新されません。 – Dercni