我有一个嵌套类别系统,在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
。这似乎不是这种情况虽然。
任何人都可以解释原因吗?我认为优先级是基于文件顺序。
答案 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文档中找到明确的警告,但是练习教得最好。
希望这会对你有所帮助。