【決断くん】 細部の調整(バリデーションとかアクセス制限とか)
アプリの基本機能が整ったので、いったん新規実装をストップし、バリデーションやアクセス制限などの細部の調整を行いました。 その時に学んだことや、初めて使用したコードなどを記します。
request.refererでURLの直打ちを無効にする
確認画面を通らないと、決断結果画面を閲覧できないように設定したい。
つまり、URLの直打ちに制限をかけたい。
def result_throuth_confirm? if request.referer.nil? redirect_to new_choice_path flash[:danger] = 'お題と選択肢を入力してください' end end
before_action :result_throuth_confirm?, only: [:result]
request.referer(referrer)
で、遷移元urlを絶対パスで取得できる。
これは直接URLを入力した場合はnilになるので、上のコードのように書くことでURLを直打ちをした場合はアクセスできないように設定できる。
ちなみに、URI(request.referer).path
で相対パスを取得できるので、
unless URI(request.referer).path == confirm_choices_path
と書くこともできる。
before_validatinonコールバック
何気に初めて使用したコールバック。
Choiceモデルに記載し、validationを通る際に@choiceのtitleが未入力の場合になし
と自動的に登録されるように設定。
before_validation :set_choice_title private def set_choice_title self.title = 'なし' if title.blank? end
掲示板の匿名機能など、使用する機会は多そう。