読者です 読者をやめる 読者になる 読者になる

Rails tutlarila 9章

Rails Railsチュートリアル プログラミング

学んだこと

  • form_forが新規ユーザーと既存ユーザーをどう見分けているか
  • フレンドリーフォワーディング
  • リダイレクトが呼び出されるタイミング

form_forが新規ユーザーと既存ユーザーをどう見分けているか

Active Recordのnew_record?論理値メソッドを使用して区別している。form_forの引数に渡されたインスタンスに対してnew_record?を実行し、trueの時はPOSTを、falseの時はPATCHを使用する。

User.new.new_record?
=> true

User.first.new_record?
=> false

フレンドリーフォワーディング

ユーザーがリクエストした時点のページを保存しておいて、ログイン後などにその場所にリダイレクトさせる。

# 記憶したURL (もしくはデフォルト値) にリダイレクト
  def redirect_back_or(default)
    redirect_to(session[:forwarding_url] || default)
    session.delete(:forwarding_url)
  end

  # アクセスしようとしたURLを覚えておく
  def store_location
    session[:forwarding_url] = request.url if request.get?
  end

転送先のURLを保存するには、session変数を使用する。

リクエスト先のURLを取得するために、requestオブジェクトを使用する。

リダイレクトが呼び出されるタイミング

return文やメソッド内の最終行が呼び出されない限り、リダイレクトは発生しない。

よって、redirect文の後にあるコードも実行される。