名前付きルートを使いこなす

記事を書く理由

名前付きルートはページを指定するときに便利。
しかしヘルパー名が似ており(むしろ同じなので)、使うときに何を使えばいいかサッと出てこない
そんな小さな悩みですが解決するため一度整理します。

流れとゴール

  • 名前付きルートを指定しようとすると毎回混乱するので、まずは混乱ポイントを整理
  • _pathヘルパーからアクションを推測できるように覚え方を定義しておく

そもそも名前付きルートとは

「リソースフルなルーティングを作成したときに使えるようになるヘルパーのこと」です

resources :users の例

routes.rbでresources :usersを定義すると使えるようになるヘルパー

f:id:Barry12113920:20201021230317p:plain
resources :users の名前付きルート表

混乱ポイント

  • 同じヘルパー名が存在する
    users_path や user_path(:id)

  • 単数形と複数形が存在する
    例)
    POST /users users_path
    PATCH /users/:id user_path(:id)
    DELETE /users/:id user_path(:id)

    リクエストと合わせて考えれば1人のユーザーを登録したり更新、削除するヘルパーだと推測できるのに、ヘルパー名は単数形と複数形があり混乱する。

解決策

  • 特定のユーザーが既に存在するアクションは単数形と覚える
    GET user_path(:id) → showアクション
    PATCH user_path(:id) → updateアクション
    DELETE user_path(:id) → destroyアクション

    POST users_path はユーザーを新規作成するパス。現時点で特定のユーザーが存在しないので、複数形のusersを使っている。
    POST users_path → createアクション


  • 残りは自力で覚える
    GET users_path → indexアクション
    GET new_user_path → newアクション
    GET edit_user_path(:id) → editアクション

    以上の3つはヘルパー名とリクエストから推測しやすいので自力で覚えましょう。

おまけ)pathヘルパーとurlヘルパーの使い分け

  • _pathヘルパーには、対応する_urlヘルパーが存在する
  • _urlヘルパーは、_pathの前に現在のホスト名、ポート番号、パスのプレフィックスが追加されている
    → 簡単に言えばurlを指定している

どう使い分ければいいの?

redirect_toでは_urlヘルパーが推奨されてたりするけど、基本どちらを使っても動く。あんまり気にしなくていい。