こんにちは、たにーです。
今回は、ルーティングを書く方法でどんななのがあるのか記述していきます。
チーム開発でURLに特定の文字を含めない、グルーピングしないといけないなど
新しいルーティングの書き方を学びました。
知らない書き方もあったことから、記憶に残っている内に
復習すべきと思い、今回記述していくことにしました。
#① 〇〇 => 〇〇#〇〇
urlごとに設定していく記述
おそらくこれは基本かと思います。
get 'homes/top' => "homes#top"
get 'homes/about' => "homes#about"
rails routesで確認。
Prefix Verb URI Pattern Controller#Action
homes_top GET /homes/top(.:format) homes#top
homes_about GET /homes/about(.:format) homes#about
#② resources :〇〇
resourcesで簡単に設定できる方法です。
resources :books
rails routesで確認。
Prefix Verb URI Pattern Controller#Action
books GET /books(.:format) books#index
POST /books(.:format) books#create
new_book GET /books/new(.:format) books#new
edit_book GET /books/:id/edit(.:format) books#edit
book GET /books/:id(.:format) books#show
PATCH /books/:id(.:format) books#update
PUT /books/:id(.:format) books#update
DELETE /books/:id(.:format) books#destroy
ちなみに、いらないページ、アクションなどある場合は、指定することも出来ます。
##指定する場合
resources :books, only:[:index, :show]
Prefix Verb URI Pattern Controller#Action
books GET /books(.:format) books#index
book GET /books/:id(.:format) books#show
後ろに、onlyをつけるだけでresourcesに制限をかけれます。
不必要なルーティンがある場合は、これで削除したほうが余計な情報がなくなって見やすくもなります。
③ namespace
コントローラを名前空間によってグループ化することもできます。
先日書いたQiita記事のuserとadminがある場合に、使うと思います。
namespace :admins do
resources :items, only:[:index, :show, :edit, :new]
end
これにより、itemspath名、URL、コントローラアクションにadminが加わります。
Prefix Verb URI Pattern Controller#Action
admins_items GET /admins/items(.:format) admins/items#index
new_admins_item GET /admins/items/new(.:format) admins/items#new
edit_admins_item GET /admins/items/:id/edit(.:format) admins/items#edit
admins_item GET /admins/items/:id(.:format) admins/items#show
④ scope module
URLからadminsを消したURLにしたい場合は、scope moduleを使います。
scope module: :admins do
resources :items, only:[:index, :show, :edit, :new]
end
もしくは、ブロックを使わない書き方も可能。
resources :items, only:[:index, :show, :edit, :new], module: "admin"
これにより、URLにadminsの文字が含まれない様になります。
Prefix Verb URI Pattern Controller#Action
admins_items GET /items(.:format) admins/items#index
new_admins_item GET /items/new(.:format) admins/items#new
edit_admins_item GET /items/:id/edit(.:format) admins/items#edit
admins_item GET /items/:id(.:format) admins/items#show
⑤ scope
④の逆バージョンになります。
adminsなしのコントローラーにしたい場合は、scopeを使います。
scope 'admins' do
resources :items, only:[:index, :show, :edit, :new]
end
これにより、コントローラーからadminsが消えました。
Prefix Verb URI Pattern Controller#Action
admins_items GET /admins/items(.:format) items#index
new_admins_item GET /admins/items/new(.:format) items#new
edit_admins_item GET /admins/items/:id/edit(.:format) items#edit
admins_item GET /admins/items/:id(.:format) items#show
#まとめ
以上がルーティング設定の方法です。
まとめると、
- 〇〇=>〇〇#〇〇
- resoureces
- namespace
- scope module
- scope
これらの5つの書き方で大抵のことは対応できるかと思います。
もし、間違っていたらご指摘いただけますと幸いです。
以上、たにーでした。
参考文献