Ruby
JRuby
RubyOnRails

Ruby on Railsのルーティングについて

More than 1 year has passed since last update.

はじめに

RubyOnRailsについてネットで色々調べてみたが、どれも記述がくどくてRailsの各要素の関連がよくわかりにくい
自分なりにRubyOnRailsのルーティングについて簡単にまとめてみた

Railsのルーティング

表形式でまとめる

Railsのルーティングにはつまるところ、
(要求,URL,コントローラーのクラス名,コントローラーのメソッド名,viewのフォルダ,viewのファイル名)
が必要ようだ
個人的にはルーティングは

要求 URI コントローラーのクラス名 コントローラーのメソッド名 viewのフォルダ viewのファイル名
(1) (2)   (3) (4) (5) (6)

のように表形式でまとめるほうが理解しやすいと思う
上記の表に従えば、routes.rbにGet要求のルーティングを記載したいとき、
(1) '(2)', to: '(3)から_controlerを除外したもの#(4)'
の形式で記載すれば、ブラウザ上で
http://localhost:3000/(2)/
と入力すれば、(6)のViewが表示されることになる

具体例

Getの具体例

まずはGetの具体例を示す

要求 URI コントローラーのクラス名 コントローラーのメソッド名 viewのフォルダ viewのファイル名
get nikkyuusan sample_controller sayhelloToNyukkyusan sample sayhelloToNyukkyusan.html.rb

の場合だと
routes.rbには
get '/nikkyuusan/', to: 'sample#sayhelloToNyukkyusan'
の形式で記載すれば、ブラウザ上で
http://localhost:3000/nikkyuusan/
と入力すれば、sayhelloToNyukkyusan.html.rbの記述が表示されることになる

postの具体例

次にPostの具体例を示す

要求 URI コントローラーのクラス名 コントローラーのメソッド名 viewのフォルダ viewのファイル名
post nikkyuusanpost sample_controller sayhellopost sample sayhellopost.html.rb

の場合だと
routes.rbには
post '/nikkyuusanpost/', to: 'sample#sayhellopost'
と記載する
そして、htmlファイルを例えば

非同期.html
<!DOCTYPE html>
<html>
<script>
function doPost(){
    var req = new XMLHttpRequest();
    req.open('POST', 'http://localhost:3000/nikkyuusanpost/', true);
    req.setRequestHeader('content-type',
    'application/x-www-form-urlencoded;charset=UTF-8');
    req.send('name='+f('nikkyu'));
    req.onload =  r(req,
        function(){f('result').innerText=req.responseText ;});
}

function r(req,caller){
  return function (event){
    if (req.readyState === 4 && req.status === 200) 
      caller();
  };
}
function f(str){
    return document.getElementById(str);
}
</script>
<body>
<input type='text'id='nikkyu'><input type='button' onclick='doPost();'>
<div id='result'></div>
</html>

のように作成し、postメソッドを投げれば、画面上にHTMLのレスポンス内容が表示される

規約でプログラムを縛る

上記の表を見ると
コントローラーのクラス名(の一部)→viewのフォルダ
コントローラーのメソッド名→viewのファイル名(の一部)
の対応付けさえ守っていれば、後はフレームワークで自動的にHTTPリクエストのルーティングをしてくれることが分かる。
プログラムの自由度は下がるが、その分、ロジックの記載がシンプルですむ。
この「規約を守ってプログラミングする」というのがRuby on Railsの大きな特徴でもあり、同時に足かせでもある。
設定ファイルでガチガチに定義を行うJavaのWebフレームワークとはこの部分で大きく思想が違っている