Railsでルーティング設定を行う
開発環境はWindows 7 Professional(32bit)+Ruby 2.3.3p222+Rails 4.2.1。
ルーティングの設定は、config/routes.rb内で行う。
Rails.application.routes.draw do ~ endの間に加えたコードがルーティングの設定になる。
例えば、『ルート/about』というパスを実現したければ、TopControllerのaboutアクションと結び付けます。
また、about_pathメソッドが、『ルート/about』を返すようになります。
config/routes.rb
Rails.application.routes.draw do root "top#index" get "about" => "top#about", as: "about" end
app/controllers/top_controller.rbでaboutアクションを追加します。
class TopController < ApplicationController def index end def about end end
app/views/topフォルダに、about.html.erbを作成します。
以下はその中身。
<h1>このサイトについて</h1>
これで、ruby bin/rails sでサーバーを立ち上げて、http://localhost:3000/aboutにアクセスすれば、今作ったページが表示されることになります。
ルーティング設定をしていないページにアクセスすると、ルーティングエラーが発生します。他にも、ルーティング設定を書き間違えたり、HTTPメソッドが合わない場合や、app/assetsやpublicの下に存在しないファイルにアクセスしようとしてもエラーになります。
例えば、http://localhost:3000/abooutにアクセスすると、
となります。
rootメソッドに「"コントローラ名#アクション名"」を指定すると、パスが「/」の場合のルーティングを指定できます。
特定のパスに対応するアクションをGETメソッドで呼び出すには、
get "パス" => "コントローラ名#アクション名"
例えば、GETメソッドでTopControllerのaboutアクションを呼び出したいときは、
get "about" => "top#about"
『ルート/login』というパスでPOSTメソッドでSessionsControllerのloginアクションを呼び出したいときは、
post "login" => "sessions#login"
『ルート/info/company』というパスのように、"info/company" => "info#company"と指定する場合は、次のように省略できます。
get "info/company"
また、ルーティングにはasオプションが使える。例えば、helpという名前のルーティングを作ると、コントローラやビューでhelp_pathというメソッドを呼び出すと、/helpという文字列が返ってきます。また、link_toメソッドやredirect_toメソッドで、:helpのように、シンボルでパスを指定します。これは、パスを返すメソッドから_pathを覗いたものを指定します。
get "help" => "documents#help", as: "help"
パラメータをパスに埋め込みたい場合は、:yearのように、「コロン+パラメータ」のようにします。例えば、『articles/2015/04』というパスによってArticlesControllerのshowアクションが呼び出され、params[:year]で「2015」、params[:month]で「04」が取り出せるようにします。
get "articles/:year/:month" => "articles#show"