LoginSignup
0
0

More than 3 years have passed since last update.

Rails6.0ルーティングまとめ

Posted at

はじめに

Rails6.0のルーティングのパス名 resouces resourceなどを忘備録を兼ねてまとめます。

明示的なルーティング指定

routes.rb
# ルートへアクセスするルーティング
root 'users#show'
root to 'users#show'
root '/', to: 'users#show'
routes.rb
# '/users/:id'でusersコントローラのshowアクションにルーティング
get '/users/:id', to: 'users#show'
routes.rb
# 'hoge'でusersコントローラのshowにルーティング
# as:オプションを使うとルーティングに名前を指定可能
get '/users/:id', to: 'users#show', as: 'hoge'

<%= form_with %><%= link_to %>などでurlを指定する際に、直接/posts/:idなどのurlのように指定可能ですが、変更の際に修正箇所が多くなり得策ではありません。
as:で名前を付けることで、修正しやすくなり、コードも読みやすくなります。

resourcesとresouceの違い

resources(複数)...7つのアクションがid付きで生成されます。
resource(単数) ...indexアクションを除いた6つのアクションがidなしで生成されます。
「写真」「ユーザー」「商品」のようにアプリケーションに複数存在する場合はresources(複数)
「自身のプロフィール」のように一つしか存在せず、idやindexが必要ない場合はresource(単数)

resources(複数)

routes.rb
resources :photos

のような記述で、以下の7つのルーティングが生成されます。この場合、いずれもPhotosコントローラに対応します。

動詞 パス コントローラ#アクション 目的
GET /photos photos#index すべての写真の一覧を表示
GET /photos/new photos#new 写真を1つ作成するためのHTMLフォームを返す
POST /photos photos#create 写真を1つ作成する
GET /photos/:id photos#show 特定の写真を表示する
GET /photos/:id/edit photos#edit 写真編集用のHTMLフォームを1つ返す
PATCH/PUT /photos/:id photos#update 特定の写真を更新する
DELETE /photos/:id photos#destroy 特定の写真を削除する

resource(単数)

routes.rb
resource :geocoder

以上の記述で以下の6つのルーティングが生成されます。この場合、いずれもgeocoderに対応します。

動詞 パス コントローラ#アクション 目的
GET /geocoder/new geocoders#new geocoder作成用のHTMLフォームを返す
POST /geocoder geocoders#create geocoderを作成する
GET /geocoder geocoders#show 1つしかないgeocoderリソースを表示する
GET /geocoder/edit geocoders#edit geocoder編集用のHTMLフォームを返す
PATCH/PUT /geocoder geocoders#update 1つしかないgeocoderリソースを更新する
DELETE /geocoder geocoders#destroy geocoderリソースを削除する

注意点

Railsのルーティングはルーティングファイルの上から順に実行します。そのため、同じ条件のルーティングが複数存在する場合、上のルーティングのみ有効になります。なお、無関係なURLの場合は順番は関係ありません。

参考

Railsのルーティング - Railsガイド v6.0
https://railsguides.jp/routing.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0