【初心者】routes.rbをもうちょっと深く理解する

Rails TutorialやProgateを一通り終えた人が、

実際にリリースされてるプロダクトを作るときによく利用されるTipsをまとめていきます。

まずはRoutesに関してです。


Routes


概要

これまでは、

get 'users/index' => 'users#index'

のようにHTTPメソッドを用いて定義していましたが、RESTを利用した方がもっと効率的です。

今回はRESTにまつわる実戦で使えるTipsを見ていきます。

なお、手で動かしながら結果を見る方法として、

サーバーを立ち上げて http://localhost:3000/rails/info/routes でブラウザから見るのがいいです。

rorensu2236さんの記事をすごい参考にしてます。

ありがとうございます。


HTTPメソッドの別の書き方

Progateで学んで来たような書き方の他にとりあえず三種類くらい見つけました。


  1. get 'users/index', to: 'users#index'

  2. get 'users/index', action: :index, controller: 'users'

  3. get 'users/index'

3は省略しすぎなので、個人的には1が好きです。


PATCH, PUT, DELETE

基本全てget, postだけで実現できるようですが、patch, put, deleteなども存在します。

post 'posts/:id/destroy' => 'posts#destroy'

みたいに記載してましたが、

delete 'posts/:id', to: 'posts#destroy'

のようにPATHを減らして見やすくすることができます。


REST

これが今回最も重要な概念。

index, show, new, create, edit, update, destroyを個別に宣言しないで一行で実現できます。

HTTPリクエストはGET, POST, PATCH, PUT, DELETEがメインなのでそれをベースに作ってしまう。

resources :users

image.png

resource :users

image.png

基本はresourcesを使うことが多いはず。

resource:idが含まれないので、全削除、とか検索とか全ユーザーに共通した処理などのパスを記載するときに利用する。


namespace

namespaceはresourcesと合わせ技で利用するとすごい便利だしコードがすごい見やすくなる。


routes.rb

#管理者

namespace :admin do
resources :mypage
end
#クライアント
namespace :client do
resources :mypage
end

namespaceに更にnamespaceをネストして使ったりなど使い方は割と多い。

image.png


routes.rb

namespace :admin do

resources :mypage, {only: [:index, :show]}
end

こちらはonly:を利用してアクションを制限することができる。

before_actionとかと同じ使い方なので細かいことは省略します。

image.png


collection / member

resources以外で定義したいルーティングはこちらを使うと便利。

resources :clients do

#コントローラーの新しいメソッド(idが不要な場合はcollection)
collection do
#全データ削除や検索には個別のIDは不要なのでcollection
post:reset_all
post:search
end

#コントローラーの新しいメソッド(idが必要な場合はmember)
member do
# そのクライアントのデータを初期化する作業や、初期データなどを入れる場合はidを利用するのでmember
get :reset_data
get :set_base_data
end
end

コメントアウトの通りでmemberとcollectionは使い分ける。

image.png


まとめ

ProgateやRails Tutorialの情報に加え、ルーティングに関してはここら辺が理解できれば問題ないかと思います。

あとは必要に応じて肉付けしていけば問題なし。