我发现了几个类似但没有定义答案的问题。
我有一个根控制的静态控制器,以便可以像这样显示视图:
mywebsite.com/admin
mywebsite.com/index
等。
我有另一个名为content_categories的控制器。我还希望显示具有相同路径的类别,例如
mywebsite.com/category-1
mywebsite.com/category-2
等...
如果我像这样设置类别路径:
match '/:id' => 'content_categories#show', via: 'get', as: 'category'
这会覆盖我的' index'的路线。和' admin'。
我想过在静态控制器中创建一个单独的动作,并为每个类别分别设置路径(我只想展示三个)并使用render:template。这有效,但显然会创建重复的URL。
关于如何做到这一点的更好的想法?
答案 0 :(得分:1)
您没有为静态控制器发布路由,但我怀疑它是类似路由的类似路由。问题是他们两个都像通配符一样"吃"之后的所有其他路线。 match '/:id'
将匹配所有内容,您的静态路由(可能)也是如此。
一种解决方案是将约束引入其中一条路线,并将其放在第一位。
这可以是正则表达式:
get '/:id', to: 'content_categories#show', constraints: { id: /category\-[0-9]+/ }
get '/:page_name', to: 'static#show'
您还可以通过creating a constraint object执行更复杂的约束。
另一方面,如果你有这样的静态路线:
get "/admin", to: "static#admin"
然后你应该能够通过在之前放置任何通配符路径来解决这个问题。