« なぜか鎌倉 | メイン | map_singular_resourceプラグイン »

2006年10月04日 (水)

Nested Resources (map.resourcesのススメ その3) [テクニカル]

「map.resourcesのススメ」シリーズ第3回。

前回map.resourcesのオプションの利用方法を解説した中に、このようなものがあった。

特定のパラメータを必須にしたい場合

例えば、特定のグループ(ID)に属するユーザの一覧を表示したいとき、

map.resources :users

とするとURLは

/users?group_id=1

のようにgroup_idをパラメータに取ることになるが、あるグループに属するというのを標準にしたければ、

map.resources :users, :path_prefix => "/groups/:group_id"

とすると、URLは

/groups/1/users

とすっきりと表記できる。

これは、モデルがhas_manyの関係のときに非常に一般的なので、Nested Resourcesとして、このようにシンプルに書けるようになった。

map.resources :groups do |group|
  group.resources :users
end

これは、

map.resources :groups
map.resources :users, :path_prefix => "/groups/:group_id"

と書いたのと同じ効果を持つ。この場合はモデルはGroup has_many :usersって感じになる。

そこでふと思ったのだが、has_manyに対応するものがあるのに、has_oneに対応するものはないのか? そもそもRailsでのリソースって複数形のみで、単数(1つしかない)リソースが想定されてない気がする。has_oneもしくはカラム単体に対応するリソースがあれば、もっとモデルを柔軟に表現できるんじゃないか?

単数限定リソースを実現するmap_singular_resourceプラグインでも作ってみるか…。

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

トラックバック

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

コメント

コメントしてください




保存しますか?