0

ネストされたカテゴリのシステムがあり、routes.rbファイルで次のように処理されます。

path = "/categories/:id"
10.times do |i|
    path << "/:id#{i}"
    match path => "categories#show", :via => [:get]
end

これはすべて非常にうまく機能します。

問題は、一般的なcategories#showページを使用したくない場合がいくつかあることです。たとえば、あるカテゴリでは、まったく異なるコントローラーに向けて発砲したいと思います。

私はこのようなことをすることができると思いました:

  # Override certain category page
  match "categories/MyCategory" => "othercontroller#specialcase"


  path = "/categories/:id"
  10.times do |i|
    path << "/:id#{i}"
    match path => "categories#show", :via => [:get]
  end

これを行うことで、正確に「www.myurl.com/categories/MyCategory」のリクエストが代わりに渡されると思いましothercontrollercategories。しかし、そうではないようです。

誰かが理由を説明できますか?優先順位はファイルの順序に基づいていると思いました。

4

1 に答える 1

0

私は以前にそのようなケースを経験しましたが、Railsは文字列「MyCategory」を他のルートのIDと混同する可能性があるようです。

私はこのようなことをします:

match "categories/special/MyCategory" => "othercontroller#specialcase"

path = "/categories/:id"
10.times do |i|
    path << "/:id#{i}"
    match path => "categories#show", :via => [:get]
end

つまり、別のルート(この例では、 "MyCategory" = ":id")のパラメーターのように終了するパスエントリがないことを確認してください。Railsのドキュメントで明示的な警告を見つけることはできませんでしたが、練習するのが最善です。

これがお役に立てば幸いです。

于 2012-09-07T10:52:51.623 に答える