« Nested Resources (map.resourcesのススメ その3) | メイン | Rails勉強会@東京 第11回 »
2006年10月05日 (木)
map_singular_resourceプラグイン [テクニカル]
きのうのエントリに書いたが、Railsのmap.resourcesに対応するリソースは複数形で、複数あることが前提とされていた。それじゃ単数(1つしかない)リソースの場合どうするんだよ、ってことで、単数リソースに対応するmap_singular_resourceプラグインを作ってみた。
使い方
routes.rbに、map.resourcesと違って単数形で書く。
map.resource :person # 紛らわしいので map.singular_resource :person も可
すると、だいたいこんな感じのルーティングが生成される。
HTTPメソッドとURL | PersonControllerのアクション | Route Name |
---|---|---|
GET /person | show | person |
POST /person | create | person |
GET /person;edit | edit | edit_person |
PUT /person | update | person |
DELETE /person | destroy | person |
map.resourcesからnewとindexを除いたような感じ。省略したけど、拡張子の:formatにももちろん対応している。:controller指定やアクション追加などのオプションももちろん使える。
has_one関係に使う
実はあんまり単体で使うことは少ないかもしれない。使われるとすればNested Resourcesで、モデル間の関係がhas_oneになっているときだ。
例えばUser has_one :profileというモデルの関係があったとすると、routes.rbにこのように書く。
map.resources :users do |user| user.resource :profile end
すると、こんな感じのルーティングになる。
HTTPメソッドとURL | ProfileControllerのアクション | Route Name |
---|---|---|
GET /users/:user_id/profile | show | profile |
POST /users/:user_id/profile | create | profile |
GET /users/:user_id/profile;edit | edit | edit_profile |
PUT /users/:user_id/profile | update | profile |
DELETE /users/:user_id/profile | destroy | profile |
きれいなURLでhas_oneの関係に対応しているのがわかる。
ソースは思いっきり手を抜いてactionpack/lib/action_controller/resources.rbからコピー&ペーストで作ったのでDRYじゃないし、相変わらずテストもないので不具合あるかも。でも使う機会はきっとあるような気がするなー。
トラックバック
このエントリーのトラックバックURL:
http://www.4bit.net/x/mt/mt-tb.cgi/147