プログラミング学習 備忘録

Railsを学習していく上での技術メモ。学んだことや解決したエラーなどを記録していきます。

【決断くん】 細部の調整(バリデーションとかアクセス制限とか)

アプリの基本機能が整ったので、いったん新規実装をストップし、バリデーションやアクセス制限などの細部の調整を行いました。 その時に学んだことや、初めて使用したコードなどを記します。

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

掲示板の匿名機能など、使用する機会は多そう。