2009年6月19日金曜日

3.RoRルーティング処理について

railsでのREST設計と密接な関係にあるのがこのルーティングの設定である。

要は、このURLとこのHTTPメソッドでアクセスがあった場合はこのページにアクセスさせるといった感じのページ遷移の設定だ。
この、ページ遷移の設定ファイルはrailsプロジェクト内のconfig/routes.rbファイルである。

今まで、俺はRESTのことを学習するまでrailsのページ遷移を以下のように記述していた。
map.connect("users/login",:controller=>'users',:action=>'login');

つまり、コントローラにusers, アクションにloginが指定されたら、usersコントローラーのloginメソッドに処理を渡すという記述である。
もちろんこの処理を書くことでそのページへのページ遷移が可能となる。しかし、railsが持っているRESTの機能を生かした方法とはいえない。

つまり、この記述方法ではどのHTTPメソッド(GET,POST,PUT,DELETE)でもアクセスできてしまい。本来のRESTの規則から逸脱してしまっている。


開発を行っているフレームワークがrailsであるのなら開発者はそのrailsに合わせるの筋である。

なので、本来は上記のようなルーティング設定方法ではなく以下のようにHTTPメソッドも含めた形で行うべきである。
map.resouces(:users,:collection =>{:login=>:get}); として行うべきだ。

この場合のアクセスURLとHTTPメソッドは~~~/users;login (GET)となる。

:collectionというのはindexやcreateなど複数のリソースを扱う類のフォームで使用し、それ以外にも:new(newアクションつまり新規登録フォームの類)、:member(show,edit,update,delete=つまり、個別のリソースを扱う類)といったシンボルが使われる。
(俺は、いまいちこの違いがつかめていない・・・・)

ちなみに、もともと map.resources :users というメソッドが記述されているが、これはindex,create,show,update,destroy,editといったCRUDのためのページへのルーティングを追加するための記述だ。ちなみに、indexとcreateは同じURLでアクセスだがHTTPメソッドの種類によってどちらを表示させるか制御しているし、 show,update,destroyも同じURLだがHTTPメソッドの種類によってその表示ページを制御している。
(これを知って、俺は今までURLの事で不思議に感じていたなぞが解けた)

これまで、RESTを考慮したrailsの設計について書いてきたが実はこのRESTで考えられているHTTPメソッドのうちPUTやDELETEは現在のブラウザでは未だ対応していない。
つまり、実際に<form method="put">などとしてページ遷移の記述を行うとブラウザが対応していないため正常にアクセスできない。
ではいったいrailsはどのようにしてRESTの設計を導入しているの・・・・。それは、PUTやDELETEメソッドで送信したい場合は実際には<form method="POST">としてデータを送り、form内で<input type="hidden" name="_method" value="put" />と記述することでこのRESTの思考を仮想的に実現させているのである。

最後に、デフォルトの7アクションのURLとHTTPメソッドの関係の表を乗せておく。
(一応コントローラにも記述してあることだが・・・)



アクションURLHTTPメソッド
index /usersGET
new/users/newGET
create/usersPOST
show/users/123GET
edit/users/123;editGET
update/users/123PUT
destroy/users/123DELETE


取りあえず今日はここまで。

0 件のコメント:

コメントを投稿

どうしようもないクズのアーチャー