Rails 带有自定义路由的自定义错误页面

Rails Custom Error Pages with Custom Routes

我正在学习本教程:http://wearestac.com/blog/dynamic-error-pages-in-rails

但是,在我的路由文件中,我有两个自定义路由:

get '/blog',        to: 'blog_posts#index', as: :blog
get '/:id',         to: 'blog_posts#show', as: :show_blog_post

当我转到一个不存在的页面时,它不会重定向到错误页面。相反,它给了我 Completed 404 Not Found. Error during failsafe response: ActiveRecord::RecordNotFound.

自定义路由以某种方式无法使错误页面正常工作。当我删除自定义路由时,一切正常。

如何让我的错误页面与此一起使用?我原以为返回 404 的任何内容都会重定向到 ErrorsController,但那没有发生。

你的

get '/:id', to: 'blog_posts#show', as: :show_blog_post

route 似乎正在获取您的自定义错误处理。如果用户转到

/404

blog_posts#show 使用参数 id = 404 调用,我猜它正在尝试查找一个 id 为 404 的博客 post,结果是 ActiveRecord::RecordNotFound异常。

你可以做的是将你的错误规则放在顶部,在 /:id 之前,因为路由是按照它们列出的顺序匹配的,但我只是建议不要使用像 /:id 因为它可能会不小心捡起东西,比如我们正在处理的东西。使用诸如 /posts/:id.

之类的描述性内容来确定路线范围