3

そこで、「Europe/France/Paris」のような ID で場所を追跡する従来のシステムを手に入れました。これを http://foobar/places/Europe/France/Paris のような URL に変換する Rails ファサードを構築しています。この要件は交渉の余地がなく、可能なレベルの数は無制限であり、スラッシュを逃れることはできません。

http://foobar/places/Europe用に routes.rb を設定するのは簡単です:

map.resources :places

...しかし、http:// foobar/places/Europe/France は、「ヨーロッパへの対応はありません」と不満を漏らしています。私は試した:

map.connect '/places/:id', :controller => 'places', :action => 'show' 

...しかし、明らかに:idが最初の「/」で終わるため、これは同じ結果になります。ID が「場所」の後のあらゆるものをカバーするようにするにはどうすればよいですか?

4

2 に答える 2

6

完全なドキュメントについては、Routing Guide を参照してください。

http://guides.rubyonrails.org/routing.html

具体的には、セクション「4.9 ルートのグロビング」。

しかし、あなたが本当にやりたいことは、ルートを次のように宣言することだと思います。

map.connect '/places/*id', :controller => 'places', :action => 'index'

のような URL で呼び出されます

/places/foo/bar/1

Yields a params[:id] => ["foo", "bar", "1"]

「/」で簡単に(再)結合して、必要な完全な文字列「foo/bar/1」を生成できます(おそらく、先頭のスラッシュを手動で再挿入する必要があります.

それでうまくいくはずです。

于 2009-12-03T05:27:26.313 に答える
0

これを思いつくために、上記のコーディの答えを少し調整しました。

map.place '/places/*id', :controller => 'places', :action => 'show'
map.connect '/places/*id.:format', :controller => 'places', :action => 'show'

map.connect の代わりに map.place を使用することで、Rails はどのリソースを扱っているかを認識しplace_urlplace_pathなどのヘルパーを正しく生成します。

これで、2 行目は機能するはずですが、上記のバグのおかげで機能しません。そのため、手動で ID を分割してフォーマットを設定する、places_controller.rb の回避策を次に示します。デフォルトは XML です。

id, suffix = params[:id].join('/').split('.') 
params[:format] = suffix ? suffix : "xml"
于 2009-12-03T23:31:49.830 に答える