1. はじめに
Rails ではルーティングを resource / resources で宣言すると、各アクションに対応する パスヘルパー が自動で生成されます。
パスや HTTP メソッドについては 公式ドキュメント に詳しく記載されていますが、「どんなヘルパー名が生えるのか」 に特化した一覧はあまり見かけません。
そこで本記事では、Rails 8 を前提に resource と resources の違いによって生成されるヘルパー名を整理しました。
2-1. 複数形リソース
複数形の resources は id 付きのルートが生成されます。
config/routes.rb
resources :contacts
| HTTP verb | パス | アクション | ヘルパー名 |
|---|---|---|---|
| GET | /contacts | #index | contacts_path |
| GET | /contacts/new | #new | new_contact_path |
| POST | /contacts | #create | contacts_path |
| GET | /contacts/:id | #show | contact_path(id) |
| GET | /contacts/:id/edit | #edit | edit_contact_path(id) |
| PATCH/PUT | /contacts/:id | #update | contact_path(id) |
| DELETE | /contacts/:id | #destroy | contact_path(id) |
2-2. 単数形リソース
config/routes.rb
resource :contact
単数形の resource は id を含まないルートが生成されます。
そのため contact_path に引数は不要です。
| HTTP verb | パス | アクション | ヘルパー名 |
|---|---|---|---|
| GET | /contact/new | #new | new_contact_path |
| POST | /contact | #create | contact_path |
| GET | /contact | #show | contact_path |
| GET | /contact/edit | #edit | edit_contact_path |
| PATCH/PUT | /contact | #update | contact_path |
| DELETE | /contact | #destroy | contact_path |
3. まとめ
Rails のルーティングは resource(単数)と resources(複数)で大きく挙動が変わります。
-
複数リソース →
contacts_path,contact_path(id)のように id 必須 -
単数リソース →
contact_pathのように id 不要
同じ「パス」を使う場合でも、生成される ヘルパー名 は状況によって変わるため注意が必要です。