gpt4 book ai didi

ruby-on-rails - Rails 将并发永久链接回退路由到另一个 Controller

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:20 24 4
gpt4 key购买 nike

我正在尝试在我的网站上制作漂亮的网址。我有两个资源:页面和博客。

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

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 中的下一个资源?

最佳答案

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

你应该给他们加上前缀

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

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

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

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

关于ruby-on-rails - Rails 将并发永久链接回退路由到另一个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20668397/

24 4 0