Rails TutorialやProgateを一通り終えた人が、
実際にリリースされてるプロダクトを作るときによく利用されるTipsをまとめていきます。
まずはRoutesに関してです。
Routes
##概要
これまでは、
get 'users/index' => 'users#index'
のようにHTTPメソッドを用いて定義していましたが、RESTを利用した方がもっと効率的です。
今回はRESTにまつわる実戦で使えるTipsを見ていきます。
なお、手で動かしながら結果を見る方法として、
サーバーを立ち上げて http://localhost:3000/rails/info/routes
でブラウザから見るのがいいです。
rorensu2236さんの記事をすごい参考にしてます。
ありがとうございます。
HTTPメソッドの別の書き方
Progateで学んで来たような書き方の他にとりあえず三種類くらい見つけました。
get 'users/index', to: 'users#index'
get 'users/index', action: :index, controller: 'users'
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
resource :users
基本はresources
を使うことが多いはず。
resource
は:id
が含まれないので、全削除、とか検索とか全ユーザーに共通した処理などのパスを記載するときに利用する。
namespace
namespaceはresources
と合わせ技で利用するとすごい便利だしコードがすごい見やすくなる。
#管理者
namespace :admin do
resources :mypage
end
#クライアント
namespace :client do
resources :mypage
end
namespaceに更にnamespaceをネストして使ったりなど使い方は割と多い。
namespace :admin do
resources :mypage, {only: [:index, :show]}
end
こちらはonly:
を利用してアクションを制限することができる。
before_action
とかと同じ使い方なので細かいことは省略します。
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は使い分ける。
まとめ
ProgateやRails Tutorialの情報に加え、ルーティングに関してはここら辺が理解できれば問題ないかと思います。
あとは必要に応じて肉付けしていけば問題なし。