24
19

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 5 years have passed since last update.

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

Posted at

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

24
19
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
24
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?