【Rails】登録内容がユニークでないユーザへの条件別対応
//
例えば
ユーザが電話番号で仮登録をし、認証のためのURLを生成して返す場合、同じ電話番号を使って再度仮登録の内容をPOSTしてくる場合がある。1時間以内に2回送ってくる人は恐らくイタズラに近い可能性があるのでエラーを返すが、それ以降に再度送ってきた場合、本当に認証のURLを紛失している可能性がある。
処理方法
まずPOSTされた電話番号が既に登録されているか確認する。
user = User.find_or_initialize_by(tel_number: q[:tel_number])
これで既に登録されていた場合はそのレコードを取得できる。
このレコードが新規のものか確認し、そうでないなら前回送信してから1時間経過しているかを判定する。
if !user.new_record? return raise HogeError if user.requested_at > Time.current - 60.minutes end
requested_at
は前回送信する際に保存した送信時間。もし新規レコード(初めての仮登録)ならここもパスする。
レコードを更新or保存する
user.update_attributes!( registered_url: https://hogehoge.. token: hogehoge.. requested_at: Time.current )
これで、新規登録、重複の登録に対応することが可能。