多个控制器,在轨道中有一个路由

时间:2015-02-10 12:11:07

标签: ruby-on-rails ruby url routing routes

我发现了几个类似但没有定义答案的问题。

我有一个根控制的静态控制器,以便可以像这样显示视图:

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。

关于如何做到这一点的更好的想法?

1 个答案:

答案 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"

然后你应该能够通过在之前放置任何通配符路径来解决这个问题。