在 rails 中具有一条路线的多个控制器

Multiple controllers with one route in rails

我发现了几个相似但 none 具有明确答案的问题。

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

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。

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

您没有 post 静态控制器的路由,但我怀疑它是与类别路由类似的路由。问题是它们都像通配符 "eat" 在它们之后的所有其他路由一样。 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"

那么您应该可以通过将这些路由 放在任何通配符路由 之前来解决问题。