【入門者・初心者向け】Ruby on Railsによるroutes(ルーティング)を再学習する!

みんな,最近Rails書いてる??
仕事でもプライベートでもいいけど,その際のRouting設計ってどうやってる?
この記事は,そんな設計をするときに入門者がどうやってやればいいの?って思うときの最初の指南になればいいと思って書いたんだ.
この記事は,Routing設計時のほんと一番最初に知っておかないとやばいってレベルの導入編になるからね.この記事をまずは抑えてね.
対象読者の想定レベルは,チュートリアル的なのさらっとやったけど,Routing設計がよくわかんねぇ...って方だよ.
Routingをどこに記述するんだっけ?
rails new hogehoge ってやると,hogehoge/config/routes.rbにあるね.
RESTfulってなに?
CRUDにまつわるルーティングのことで,デフォルトで8つ作成される.
実際のRoutingの作り方
get 'items/:id', to: 'items#show'
これって説明いるかな?
一応書いておくけど,items/1とかのパスにアクセスしたらitems_controller.rbのshowメソッドが実行されるということ.
でも,多分チュートリアルやったみんなならこんなこと説明しなくてもわかるよね?
問題は
こういうところじゃなくて,Railsマジックが使われてるところだよね?みんながよくわかんなくなっちゃうのって.
例えば,usersというユーザのCRUD処理用のRoutingがほしいとするよね.
resources :users
これだけで完成.まぁチュートリアルとか覚えてたら多分,なんとなく記憶にあるかも.
でも,これってわかる?分かる人はこの記事読まなくていいよ.
わからない人は,絶対この先読んだほうがいいね.すげー簡単な話だから.
実は
上の記述だけで,実際のroutesはこのように動くんだ.
| No. | Prefix | Verb | URI Pattern | Controller#Action | 
| 1 | users | GET | /users(.:format) | users#index | 
| 2 | POST | /users(.:format) | users#create | |
| 3 | new_user | GET | /users/new(.:format) | users#new | 
| 4 | edit_user | GET | /users/:id/edit(.:format) | users#edit | 
| 5 | user | GET | /users/:id(.:format) | users#show | 
| 6 | PATCH | /users/:id(.:format) | users#update | |
| 7 | PUT | /users/:id(.:format) | users#update | |
| 8 | DELETE | /users/:id(.:format) | users#destroy | 
さっきのresources :usersでこの挙動を取ってくる.わかりにくいかもしれないけど,一個ずつ見てこうか.
No.1
| users | GET | /users(.:format) | users#index | 
/usersにアクセスするとusers_controller.rbのindexメソッドが実行される.
これは,問題ないと思う.
No.2
飛ばそう.
No.3
| new_user | GET | /users/new(.:format) | users#new | 
/users/newにアクセスするとusers_controller.rbのnewメソッドが実行される.
これもNo.1と同様の動きなので問題ないと思う.
No.4
| edit_user | GET | /users/:id/edit(.:format) | users#edit | 
/users/:id/editにアクセスするとusers_controller.rbのeditメソッドが実行される.
これもNo.1と同様の動きなので問題ないと思う.
No.5
| user | GET | /users/:id(.:format) | users#show | 
/user/:idにアクセスするとusers_controller.rbのshowメソッドが実行される.
これもNo.1と同様の動きなので問題ないと思う.
No.6〜8
飛ばそう.
ここで多分よくわからなくなる人は,Prefixに空欄があるところだよね.つまり,さっき飛ばしたNo2とNo6〜8のところだよね.
チュートリアルとかやってて疑問に思った人もいるかもしれないけど,さくっとすすんじゃったらこの部分知らない人とかいるかもって思ってるよ.
このRoutingにおいては,例えば,erbとかでlinkを設定するときに,Prefixを呼んでusers_pathみたいにかいてたよね??
で,空欄の部分なに?ってとこ
これ実は,RESTfulなので呼ばれるVerb(HTTP動詞)が違うだけで,Prefixが同様のものなので省略されてるだけなんだ.
この例だと,No.1〜2が同じPrefixで,No.5〜8が同じPrefixになる.
例えば
No.1のusersの場合,ただのLinkでGETリクエストが呼ばれるとusers#indexが実行される.
で,もしformなどでPOSTリクエストが呼ばれるとusers#createが実行される.そういう話.
user_pathでも同様で,No.5〜8がそれぞれHTTP動詞によってどのアクションが実行されるかが決まってくるんだ.
HTTP動詞がどのアクションを呼ぶかを決めている用な感じだよ.
実際にPrefixを全部いれてみるとこうなる
| No. | Prefix | Verb | URI Pattern | Controller#Action | 
| 1 | users | GET | /users(.:format) | users#index | 
| 2 | users | POST | /users(.:format) | users#create | 
| 3 | new_user | GET | /users/new(.:format) | users#new | 
| 4 | edit_user | GET | /users/:id/edit(.:format) | users#edit | 
| 5 | user | GET | /users/:id(.:format) | users#show | 
| 6 | user | PATCH | /users/:id(.:format) | users#update | 
| 7 | user | PUT | /users/:id(.:format) | users#update | 
| 8 | user | DELETE | /users/:id(.:format) | users#destroy | 
やっぱ省略してた方が見やすいけど,最初はこうやって保管した表と見比べてみるといいよ.もちろんググったら出てくると思うけど,でも毎回ググルの?って話だよね,ソッチのほうが成長もできないし,時間の無駄だよね.
一回めんどくさいことやっておけば,記憶に残るからね.
あと,今回の記事でresourcesをおさえておけば,Railsプロジェクトのroutes.rbは10%ぐらいは読めるよ.
次の記事でそのパーセンテージを底上げするためのガイドを書くので,是非よんでね.今回はその第一歩だよ.
本
なんとなく紹介するよ.でも,僕の記事を読むほうが価値があると思うんだ.
それにこのブログを読むのはタダだからね.
![[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書 [改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書](https://images-fe.ssl-images-amazon.com/images/I/519gNUrXcML._SL160_.jpg) 
[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書
- 作者: 牧俊男,小川伸一郎,前田修吾,CTCテクノロジー株式会社
- 出版社/メーカー: 技術評論社
- 発売日: 2017/08/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
次回
次は,RailsのRoutingをもっと詳しく解説するよ.
つづく.



