名前付きルートを使いこなす
記事を書く理由
名前付きルートはページを指定するときに便利。
しかしヘルパー名が似ており(むしろ同じなので)、使うときに何を使えばいいかサッと出てこない。
そんな小さな悩みですが解決するため一度整理します。
流れとゴール
- 名前付きルートを指定しようとすると毎回混乱するので、まずは混乱ポイントを整理
- _pathヘルパーからアクションを推測できるように覚え方を定義しておく
そもそも名前付きルートとは
「リソースフルなルーティングを作成したときに使えるようになるヘルパーのこと」です
resources :users の例
routes.rbで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ヘルパーが推奨されてたりするけど、基本どちらを使っても動く。あんまり気にしなくていい。