0

我有一个嵌套类别系统,在 routes.rb 文件中处理如下:

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

这一切都很好。

问题是我有几个不想使用我的通用类别#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”的请求都会被传递给othercontroller而不是categories. 但这似乎并非如此。

谁能解释为什么?我认为优先级是基于文件顺序的。

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 回答