乐闻世界logo
搜索文章和话题

How to redirect to a 404 in Rails?

1 个月前提问
1 个月前修改
浏览次数18

1个答案

1

在Rails中重定向到404页面可以通过几种方法实现。通常这涉及到捕捉特定的异常然后重定向到一个404错误页面。以下是一些实现此功能的方法:

方法1: 使用 rescue_from

如果你希望在应用中全局处理ActiveRecord::RecordNotFound或其他类似的异常,可以在ApplicationController中使用rescue_from。这样可以捕捉到整个应用中的异常,并统一处理。

ruby
class ApplicationController < ActionController::Base rescue_from ActiveRecord::RecordNotFound, with: :render_404 private def render_404 render file: 'public/404.html', status: :not_found end end

这段代码会捕捉ActiveRecord::RecordNotFound异常,并调用render_404方法,该方法渲染了存放在public/404.html的静态页面,并返回HTTP状态码404。

方法2: 在路由中处理不存在的路径

你也可以在config/routes.rb文件中添加一个通配符路由,用于捕捉所有未匹配到的路由,然后指向一个专门处理404的控制器和动作。

ruby
Rails.application.routes.draw do # 其他路由定义... # 通配符路由,应放在所有其他路由定义之后 match '*path', via: :all, to: 'errors#not_found' end

然后,在ErrorsController中定义一个not_found方法:

ruby
class ErrorsController < ApplicationController def not_found render file: 'public/404.html', status: :not_found end end

这样,任何不匹配现有路由的请求都会被重定向到ErrorsControllernot_found动作,并返回404状态码。

方法3: 使用 render :status => 404 直接在控制器中处理

在某些情况下,你可能只想在特定的控制器操作中处理404错误。例如,当某个资源不存在时:

ruby
def show @user = User.find(params[:id]) rescue ActiveRecord::RecordNotFound render file: 'public/404.html', status: :not_found end

这种方法允许你在特定的控制器动作中直接处理记录未找到的异常。

以上方法都是在Rails应用中处理和重定向到404页面的常见方式。你可以根据具体的应用需求和偏好选择最适合的方法。

2024年8月5日 01:00 回复

你的答案