Rails2.0のScaffold後のルーティング設定についてメモ

Rails2.0でのScaffold後のルーティング設定で注意が必要なのでメモ。

自分の場合、ドメインの後にコントローラ名ではなく、アプリケーション名を挟みたいことが殆どだ。

例えばコントローラー名がfoosだった場合

http://2ca3.dyndns.org/foos/show/1
では無くアプリ名(便宜上"apl")を挟みたいので
http://2ca3.dyndns.org/apl/foos/show/1
と言った具合だ。

で、Rails1.0だと
routes.rb内の

map.connect ':controller/:action/:id'
という記述を
map.connect 'apl/:controller/:action/:id'
とするだけでよかった。

で、2.0でも同じノリでやると

http://2ca3.dyndns.org/apl/foos/show/1
で見えるようにはなるんだけど、
link_toで作られるパスが
http://2ca3.dyndns.org/foos/new/
とかみたいに、古いまま。
1.0だと
http://2ca3.dyndns.org/apl/foos/new/
となってくれる所なので、よろしくない。

http://2ca3.dyndns.org/foos/show/1
というURLも使えるままなので、これもよろしくない。
1.0だと↑は使えなくなる。

で、routes.rbを見比べてみると2.0の方は
map.resources :foos
という記述が増えている。
これは2.0からScaffoldがRESTful対応となったための追加らしい。
url指定をシンプルに書けるようだ。

結論としてはmap.resourcesの部分を以下のように書き直せば良い

map.resources :foos, :path_prefix => '/apl'
今回、routes.rbを調べてその多機能ぶりにびっくり。
今まで、いかに自分が無駄なことをしていたのか・・・と。

以下を参照しました。有難う御座います。
http://www.eisbahn.jp/yoichiro/2007/12/3mapresources.html
http://wota.jp/ac/?date=20050725#p01

active_scaffold使いたい時は

map.resources :foos, :path_prefix => '/apl', :active_scaffold => true
と言った具合で直せばOK!

初めてのRuby
初めてのRuby
posted with amazlet at 08.07.04
Yugui
オライリージャパン
売り上げランキング: 744
おすすめ度の平均: 5.0
5 要点がコンパクトにまとまっています。(中級者以上向け)