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!
おすすめ度の平均:
要点がコンパクトにまとまっています。(中級者以上向け)