我想在我的网站上制作精美的网址。 我有两个资源:页面和博客。
对于他们两个我定义了永久链接:
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
中的下一个资源?
答案 0 :(得分:-1)
您有两条指向不同资源的相同路线。这是一个错误,因为永远不会调用第二个资源。
你应该加上前缀
get 'pages/:id', to: 'pages#show', as: :page
get 'blogs/:id', to: 'blogs#show', as: :blog
否则,第一个路由必须具有处理请求类型的逻辑,包括回退。从理论上讲,您可以将:id
路径路由到首先尝试获取页面的中间控制器,如果失败则会获取ID。
但绝对不推荐,因为ID可能重叠。
另请注意,建议您使用Rails路由中的资源。他们将为您创建最常见的路线并处理路径生成。