« SimplyRestfulプラグインのススメ | メイン | 舞波本きたー »
2006年08月02日 (水)
map.resourcesのススメ(「SimplyRestfulプラグインのススメ」改め) [テクニカル]
前の記事に引き続き、map.resourcesのオプションの利用方法を解説。DHHによってRails本体にマージされちゃったので、「SimplyRestfulプラグインのススメ」って言えなくなっちゃった…。てことで改題。
コントローラ名を変える
コントローラにモデル名の複数形をつけるのが気に入らない場合、コントローラ名を好きな名前に変えることもできる。map.resourcesにオプションでこのように指定してやるだけだ。
map.resources :people, :controller => "person"
特定のパラメータを必須にしたい場合
例えば、特定のグループ(ID)に属するユーザの一覧を表示したいとき、
map.resources :users
とするとURLは
/users?group_id=1
のようにgroup_idをパラメータに取ることになるが、あるグループに属するというのを標準にしたければ、
map.resources :users, :path_prefix => "/groups/:group_id"
とすると、URLは
/groups/1/users
とすっきりと表記できる。
このとき同時にオプション :name_prefix => "groups_" と指定すれば、名前付きルートの名前の最初に groups_ がつき、通常と区別することができる。よって、
map.resources :users # 通常のユーザ map.resources :users, :path_prefix => "/groups/:group_id", :name_prefix => "groups_" # グループに属するユーザ
のように2種類同時に使うことも可能。
CRUDから外れたアクションを追加する場合
DHH曰く、「ここは敢えて CRUD から外れよう、と判断するのはありだと思う。こういうのはバランスの問題で、極端に走るのがいいとは限らない」。
例えば、ユーザにマークをつけるmarkアクションを追加する場合、このように指定する。
map.resources :users, :member => { :mark => :post }
これで mark_user という名前付きルートで
/users/1;mark
という形のURLがHTTP POSTに限って使えるようになる。
オプションとして与えるハッシュのキーはそれぞれ以下のように対応している。
キー | URL |
---|---|
:member | /users/1;アクション名 |
:collection | /users;アクション名 |
:new | /users/new;アクション名 |
ハッシュの値のハッシュ(ややこしい)は、{ アクション名 => 許可されるHTTPメソッド } の形で指定する。
あんまりすっきりした形で指定できないなあと思うけど、そもそもCRUDから外れたアクションはあまり追加しないほうがいいわけで、乱用は禁物だ。
最後に
Rails本体にマージされたということで、いよいよRailsアプリがCRUDに、RESTfulになる日が近づいてきている感じがする。正直個人的には1.2の機能ではActiveResourceよりこっちのほうがうれしい。Edge Railsを厭わない人は今からでもどんどん使ってみて、CRUDな設計・実装をぜひ実現してください。僕もいろいろ使ってみてABDとの相性などを調べていきたいと思う。
参考
- Refactoring to REST
IconBuffet.comというサイトをSimplyRestfulプラグインを使ってRESTにリファクタリングしてみましたというメモ。 - Getting RESTful on Rails (Part 1)
英語でのSimplyRestfulプラグインの解説。こっちのほうがわかりやすいかも? - SimplyRestful plugin backport
SimplyRestfulプラグインのRails1.1.4向けバックポート。ルーティングのセパレータにセミコロンやピリオドが使えないのでなかなかつらいようだ。使ったことないのでどなたか使ってみてください。 - Request Routing Plugin
上のバックポートを動かすのに必要なプラグイン。ルーティングの:conditionsに:subdomain, :domain, :method, :port, :remote_ip, :content_type, :accepts, :request_uri, :protocolが指定できるようになるという、なかなか使えそうなプラグイン。
トラックバック
このエントリーのトラックバックURL:
http://www.4bit.net/x/mt/mt-tb.cgi/134