ルーティングを理解してみる
Railsでは、URL(パラメーターを含む)をもとにコントローラ/アクションを決定するというルーティングがあり、これらは「アプリ名/config/routes.rb」という設定ファイルに定義します。
その設定ファイルの中身を確認するといろんなサンプルが記述されていますが、
利用頻度が高そうなものをまとめておきたいと思います。
ちなみに著者はRails 4.1.4、ruby 2.0.0を動作させた環境を前提として進めていきます。
最近勉強したばかりですので、間違っている等などがあればご指摘していただければと思います。
HTTPメソッドを利用したシンプルな例
get 'URL', to: 'コントローラー#アクション'
例
get 'yokohama', to: 'user#kanagawa'
http://XXXXXX/yokohamaへアクセスした場合、userコントローラーのkanagawaアクションから呼び出せるようになります。
matchメソッド
match ':controller(/:action(/:id))', via: [ :get, :post, :patch ]
すべてのアクションメソッドが/controller/actionの形式で呼び出せるようになります。
しかし、全てのアクションがGETで実行されてしまうという懸念があり、Railsが理想とすRESTful設計に準拠すべきであるということでRails4から非推奨となったそうです。
そこまで深く掘り下げずとにかくRaisを触りたい、学習したい場合は上記のように設定しても問題ないかと思います。
resourcesメソッド
resources :リソース名 [オプション]
RESTful設計思想に則ったURLを自動生成することができます。
モデルによって作成されたnewsの場合
resources :news
news_index GET /news(.:format) news#index POST /news(.:format) news#create new_news GET /news/new(.:format) news#new edit_news GET /news/:id/edit(.:format) news#edit news GET /news/:id(.:format) news#show PATCH /news/:id(.:format) news#update PUT /news/:id(.:format) news#update DELETE /news/:id(.:format) news#destroy
http://XXXXXX//rails/info/routes
もしくは
rake routesコマンドで確認すると上記のようなURLが自動生成されます。
resourcesメソッドはビューヘルパーlink_toで使えるので大変便利です。
<%= link_to '一覧画面', news_index_path %> <!-- 出力結果 <a href="/news">一覧画面</a> -->
<%= link_to '登録画面', new_news_path %> <!-- 出力結果 <a href="/news/new">登録画面</a> -->
<%= link_to '編集画面', edit_news_path(1) %> <!-- 出力結果 <a href="/news/1/edit">編集画面</a> -->
resourcesはいろんなオプションがあって、カスタマイズが可能ですので詳しいことは以下のサイトにてご確認ください。
resources - リファレンス - Railsドキュメント
resourceメソッド
resource :リソース名 [オプション]
resourcesメソッドと似てますが、アプリケーションの中で1つしかない情報、単体リソースとして扱いたい場合はresourceメソッドを利用します。
news POST /news(.:format) news#create new_news GET /news/new(.:format) news#new edit_news GET /news/edit(.:format) news#edit GET /news(.:format) news#show PATCH /news(.:format) news#update PUT /news(.:format) news#update DELETE /news(.:format) news#destroy
resourcesメソッドと比べるとPathにid:が含まれなくなりindexアクションがなくなっていることが分かります。
rootメソッド
例えば、「http://XXXXXX.co.jp/」に対し、トップページを指定したい場合は、rootメソッドを利用します。
root 'user#index'
「http://XXXXXX.co.jp/」へアクセスしたら、userコントローラーのindexアクションから呼び出すことができます。
namespaceブロック
/アプリ名/app/controllers
コントローラークラスが格納されているディレクトリに多くのファイルがあると保守しづらい点があるかと思います。
その場合はサブフォルダを作成するなり保守性を上げたい場合、このような構成に対しnamespaceブロックを利用します。
namespace :admin do resources :blog end
/admin/blog(.:format) admin/blog#index /admin/blog(.:format) admin/blog#create /admin/blog/new(.:format) admin/blog#new /admin/blog/:id/edit(.:format) admin/blog#edit /admin/blog/:id(.:format) admin/blog#show /admin/blog/:id(.:format) admin/blog#update /admin/blog/:id(.:format) admin/blog#update /admin/blog/:id(.:format) admin/blog#destroy
管理者用サイトとユーザーサイトに分けたい場合などそういった用途に使えそうなと思います。