k01ken’s b10g

He110 W0r1d!

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にアクセスすれば、今作ったページが表示されることになります。
f:id:k01ken:20180115182344p:plain

ルーティング設定をしていないページにアクセスすると、ルーティングエラーが発生します。他にも、ルーティング設定を書き間違えたり、HTTPメソッドが合わない場合や、app/assetsやpublicの下に存在しないファイルにアクセスしようとしてもエラーになります。
例えば、http://localhost:3000/abooutにアクセスすると、
f:id:k01ken:20180115185138p:plain
となります。

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"