routes.rb文件未按预期路由

时间:2012-09-07 09:30:57

标签: ruby-on-rails ruby ruby-on-rails-3 routes

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

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

这一切都很有效。

问题是我有几个案例我不想使用我的通用类别#show page。例如,对于一个类别,我想完全触发完全不同的控制器。

我以为我可以这样做:

  # 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。这似乎不是这种情况虽然。

任何人都可以解释原因吗?我认为优先级是基于文件顺序。

1 个答案:

答案 0 :(得分: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文档中找到明确的警告,但是练习教得最好。

希望这会对你有所帮助。