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の情報に加え、ルーティングに関してはここら辺が理解できれば問題ないかと思います。
あとは必要に応じて肉付けしていけば問題なし。




