よちよち.rbでrake routes で出てくる結果について学びました

毎週月曜日、よちよち.rbにて、Rails4のお勉強をしております。
(今はRailsチュートリアルをやってます)
※よちよち.rbについて詳しくは
http://yucato.net/about-yochiyochirb

第11回、第12回のよちよちでrake routesあたりのことを学び、色々勉強になりましたので、その内容を纏めたいと思います。

使った教材

Railsチュートリアルの2.2.2 MVCの挙動
第2章 デモアプリケーション | Rails チュートリアル

学んだこと

  • リクエストされたURLをさばくのはconfig/routes.rbで書かれた内容に基づく
    Railsチュートリアルの図2.11で「Rails router」として描かれている部分。
    config/routes.rbの中にresources :usersなどと書かれている部分があり、
    そこの記載で色々決まるみたいです。

  • routes.rbの中身「resources :users」の意味
    resourcesというのはメソッドで、(resources - リファレンス - - Railsドキュメント)
    indexとかcreateとか幾つか(よく使う?)アクションへのルーティングを
    まとめて定義してくれる便利なもの。
    引数の:usersはuserに対する諸々を定義してくださいね、というお願いを(私が)している部分

  • どういう定義がされているのか確認する方法
    コマンドラインrake routes すると

Prefix Verb   URI Pattern               Controller#Action
    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PATCH  /users/:id(.:format)      users#update
          PUT    /users/:id(.:format)      users#update
          DELETE /users/:id(.:format)      users#destroy

みたいな感じで定義を見ることが出来ました。
ここに、ブラウザからどんなリクエストがきたら、どんなアクションを(Rails routerがコントローラーに)お願いするのかが書かれているようです。

  • rake routesの中身について
    resourcesの引数を:usersにしたので、URIとControllerはusersのことになっているのでしょう。
    あとはGETとかPOSTとかのhttpのメソッドURIのパターンで呼び出すアクションが決まるみたいです。
    resourcesと書いただけなのに、index〜destroyまで一気に定義されることに感動。

  • resources :usersをもう少し掘り下げてみる
    一気に定義される便利さに感動する一方で、定義しないお願いも出来るみたいです。
    よちよちで、きたむー先生に教えて頂きました。オプションがあるみたいです。
    resources - リファレンス - - Railsドキュメントを見ると
    resources :users, :only => [:index]みたいな感じですかね。
    routes.rbを編集した後、rake routes

Prefix Verb URI Pattern      Controller#Action
users GET /users(.:format) users#index

となりました。
この作業を通じて、routes.rbを編集するとビルド的な作業とかすることなく、すぐにrake routesに反映されるのだ、ということも同時に学びました。

  • routes.rbをもうちょっと試してみる
    書けばすぐに反映されると分かり、失敗してもgitで戻せば良いね、ということもあり
    :usersじゃないのを書くとどうなるのだろうか、と。
    適当にresources :fooとか書いてrake routes
   Prefix Verb   URI Pattern             Controller#Action
foo_index GET    /foo(.:format)          foo#index
          POST   /foo(.:format)          foo#create
  new_foo GET    /foo/new(.:format)      foo#new
 edit_foo GET    /foo/:id/edit(.:format) foo#edit
      foo GET    /foo/:id(.:format)      foo#show
          PATCH  /foo/:id(.:format)      foo#update
          PUT    /foo/:id(.:format)      foo#update
          DELETE /foo/:id(.:format)      foo#destroy

定義されますね。
Controllerは作ってないので、呼び出す先はないのですが、Rails routerは粛々と仕事をするのだということが分かりました。
ちなみに、ゆかおさんからusersみたいに複数形じゃない場合にはfoo_indexみたいにちょっと定義が変化する、と教えて頂きました。

感想

昔、自分でこの辺りの話勉強したときに比べて、よく分かった感が半端なかったです。
(もちろん、まだまだ分からないことだらけですが)
目線の高さが同じぐらいの人たちと学習する楽しさを日々実感してます。