« なぜか鎌倉 | メイン | 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プラグインでも作ってみるか…。
トラックバック
このエントリーのトラックバックURL:
http://www.4bit.net/x/mt/mt-tb.cgi/146