Rails路由并发永久链接回退到另一个控制器

时间:2013-12-18 21:07:01

标签: ruby-on-rails ruby routing

我想在我的网站上制作精美的网址。 我有两个资源:页面和博客。

对于他们两个我定义了永久链接:

def to_param
  permalink
end

我在routes.rb中创建了自定义路由:

get ':id', to: 'pages#show', as: :page
get ':id', to: 'blogs#show', as: :blog

另外它可以正常工作。

但是我一起开启了这种行为:

如果我输入mysite.com/blog_link(为博客记录定义的永久链接),我会收到此错误 ActiveRecord::RecordNotFound in PagesController#show

如果找不到记录,如何定义页面以回退到routes.rb中的下一个资源?

1 个答案:

答案 0 :(得分:-1)

您有两条指向不同资源的相同路线。这是一个错误,因为永远不会调用第二个资源。

你应该加上前缀

get 'pages/:id', to: 'pages#show', as: :page
get 'blogs/:id', to: 'blogs#show', as: :blog

否则,第一个路由必须具有处理请求类型的逻辑,包括回退。从理论上讲,您可以将:id路径路由到首先尝试获取页面的中间控制器,如果失败则会获取ID。

但绝对不推荐,因为ID可能重叠。

另请注意,建议您使用Rails路由中的资源。他们将为您创建最常见的路线并处理路径生成。