RailsでWikiクローンを作る08
Routing
Routing とは、Rails で Apache の mod_rewrite みたいなことをする機構で す。詳しくはhttp://wota.jp/ac/?date=20050725が参考になりますので、そち らを参照してください。
Rails でのアクションの URL の基本形は、
コントローラ名/アクション名/ID
です。今まで、例えば FrontPage を表示しようと思うと、
http://localhost:3000/wiki/show/FrontPage
という、ちょっと長い URL になっていました。本当は http://localhost:3000/ にアクセスすると FrontPage を表示したいところで すが、今は Congratulations, you've put Ruby on Rails! のページ (public/index.html)が表示されているだけです。これを Routing 機構を使っ て変更します。
Routing の設定ファイルは config/routes.rb です。デフォルト(からコメン トを削除)では次のような内容になっています。
ActionController::Routing::Routes.draw do |map| map.connect ':controller/service.wsdl', :action => 'wsdl' map.connect ':controller/:action/:id' end
この map.connect の部分がルール定義で、上から順番に評価されます。 wsdl の行は web service 用で、とりあえず無視して構いません。その下の map.connect ':controller/:action/:id'の部分が Rails のデフォルトの Routing定義です。よって、この行は一番下に常に残しておきましょう。
さて、http://localhost:3000/、つまりトップページにアクセスした場合に FrontPage を表示するようにするには、まずconfig/routes.rb に以下の行を 追加します (途中で改行していますが、もちろん一行に書いても構いません)。
map.connect '', :controller => 'wiki', :action => 'show', :id => 'FrontPage'
第1引数は書き換え対象となる URL で、ここでは ''(空文字列)、すなわちトッ プページにアクセスした場合のルール定義ということになります。第2引数以 降は、マッチしたときに表示するページの定義で、この例では /wiki/show/FrontPage を表示するように指定しています。
そして、もはや不要になった public/index.html を削除します(残っていると そちらが優先される模様)。これらの作業をしてから、実際に http://localhost:3000/ にアクセスすると、FrontPage が表示されるはずで す。
これだけでは Apache の mod_rewrite を使った場合とたいして嬉しさは変わ りませんが、Rails の場合、Routing の設定は、ビューで使うヘルパーメソッ ド link_to にも影響をおよぼします。 今まで、
link_to 'FrontPage', :action => 'show', :id => 'FrontPage'
は、
<a href="/wiki/show/FrontPage">FrontPage</a>
というような HTML に展開されていましたが、上記の Routing の設定をした後は
<a href="/">FrontPage</a>
に変わります。
ついでに、FrontPage 以外の各ページを表示する URL も Routing 機構を使っ て少し短くしてみます。 config/routes.rb に以下の行を追加します。
map.connect 'show/:id', :controller => 'wiki', :action => 'show'
これで、今まで
http://localhost:3000/wiki/show/ページ名
としてアクセスしていたものが、
http://localhost:3000/show/ページ名
でアクセスできるようになります。

Keyword(s):
References:[RailsでWikiクローンを作る]