📜  rails not_found - Ruby (1)

📅  最后修改于: 2023-12-03 15:34:36.659000             🧑  作者: Mango

Rails not_found - Ruby

如果你使用Ruby on Rails开发应用程序,那么你可能会在开发过程中遇到404错误,也就是“not found(没有找到)”错误。这个错误很常见,通常是由于以下原因:

  • 该请求的资源不存在。
  • 该路由没有被正确定义。
  • 该请求的参数不正确。
  • 其他未知原因。

当发生这个错误时,Rails框架会自动渲染一个默认的404页面,显示“Page Not Found”(页面未找到)等信息。但是,你可以定制你自己的404页面,让错误页面更符合你的应用程序的外观和感觉。

如何定制Rails的404页面

Rails默认的404页面存储在public/404.html文件中。如果你想定制这个页面,你可以从这个文件复制内容并粘贴到app/views/errors/not_found.html.erb文件中。然后,你可以使用标准的ERB语法来修改这个页面的内容,例如添加你自己的CSS或JavaScript等。在这里,你可以发挥你的想象力来设计一个更符合你的品牌和应用程序的404页面。

自定义的404页面继承原来的页面示例

如果你想保留默认的Rails 404页面的外观和布局,但是改变错误消息和其他一些细节,你可以在app/views/errors/not_found.html.erb文件中使用布局文件(例如app/views/layouts/application.html.erb)来包含你的自定义内容。这样,你将继承默认页面的样式和布局,但是你可以修改内容来符合你的需求。以下是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <title>Page Not Found</title>
  </head>
  <body>
    <%= render 'layouts/header' %>
    <div class="container">
      <div class="row">
        <div class="col-md-12">
          <h1>404 Error: Page Not Found</h1>
          <p>Unfortunately, the Page you have requested was not found.</p>
        </div>
      </div>
    </div>
    <%= render 'layouts/footer' %>
  </body>
</html>
渲染局部模板示例

你还可以使用局部模板来渲染你自己的404页面。这样,你可以在多个页面中使用同样的错误处理逻辑,仅仅改变错误消息和其他细节。以下是一个示例:

在app/views/errors目录下可以新建一个_not_found.html.erb文件,然后添加以下内容:

<h1>Sorry, the page you requested was not found.</h1>

然后,在app/controllers/application_controller.rb文件中添加以下内容:

class ApplicationController < ActionController::Base
  rescue_from ActiveRecord::RecordNotFound, with: :render_not_found
  
  private
  
  def render_not_found
    render template: 'errors/not_found', layout: 'layouts/application', status: 404
  end
end

这个代码块使用了Rails的rescue_from方法,该方法可以捕获指定类型的异常(例如ActiveRecord::RecordNotFound),然后将请求重定向到指定的处理方法(例如render_not_found)。

在render_not_found方法中,我们使用了render方法来渲染一个自定义的404页面。我们指定了我们在app/views/errors/not_found.html.erb文件中创建的局部模板,并使用app/views/layouts/application.html.erb文件作为布局。我们还指定了路由器为404,这样Rails框架将自动识别该请求为“not found”错误,并提示404错误页面。

结论

定制Rails的404页面是一个很容易的过程。无论你是想保留Rails默认页面的外观和布局还是创建完全自定义的页面,你都可以使用Rails提供的工具来实现你的目标。我们希望这篇文章能够帮助你更好地理解如何处理404错误,并建立一个更好的用户体验。