« 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が指定できるようになるという、なかなか使えそうなプラグイン。

投稿者 4bit : 2006年08月02日 19:04 このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://www.4bit.net/x/mt/mt-tb.cgi/134

コメント

コメントしてください




保存しますか?