0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

コントローラの名前空間とルーティングの件

Posted at

こんにちは、たにーです。

今回は、ルーティングを書く方法でどんななのがあるのか記述していきます。
チーム開発でURLに特定の文字を含めない、グルーピングしないといけないなど
新しいルーティングの書き方を学びました。

知らない書き方もあったことから、記憶に残っている内に
復習すべきと思い、今回記述していくことにしました。

#① 〇〇 => 〇〇#〇〇
urlごとに設定していく記述
おそらくこれは基本かと思います。

routes.rb
    get 'homes/top'   => "homes#top"
    get 'homes/about' => "homes#about"

rails routesで確認。

terminal
       Prefix Verb       URI Pattern        Controller#Action
    homes_top GET    /homes/top(.:format)     homes#top
  homes_about GET    /homes/about(.:format)   homes#about

#② resources :〇〇

resourcesで簡単に設定できる方法です。

routes.rb
    resources :books

rails routesで確認。

terminal
       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

ちなみに、いらないページ、アクションなどある場合は、指定することも出来ます。

##指定する場合

routes.rb
    resources :books, only:[:index, :show]
terminal
       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がある場合に、使うと思います。

routes.rb
  namespace :admins do
    resources :items, only:[:index, :show, :edit, :new]
  end

これにより、itemspath名、URL、コントローラアクションにadminが加わります。

terminal
           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を使います。

routes.rb(ブロック有)
  scope module: :admins do
    resources :items, only:[:index, :show, :edit, :new]
  end

もしくは、ブロックを使わない書き方も可能。

routes.rb(ブロック無)
    resources :items, only:[:index, :show, :edit, :new], module: "admin"

これにより、URLにadminsの文字が含まれない様になります。

terminal
           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を使います。

routes.rb
  scope 'admins' do
    resources :items, only:[:index, :show, :edit, :new]
  end

これにより、コントローラーからadminsが消えました。

terminal
           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つの書き方で大抵のことは対応できるかと思います。

もし、間違っていたらご指摘いただけますと幸いです。

以上、たにーでした。

参考文献

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?