Rails:如何创建使用资产管道的自定义 404 错误页面? [英] Rails: How do I create a custom 404 error page that uses the asset pipeline?

查看:20
本文介绍了Rails:如何创建使用资产管道的自定义 404 错误页面?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

创建自定义错误处理页面有很多解决方案,但对于 Rails 4 几乎没有:

There are many solutions for creating customized error handling pages, but almost none for Rails 4:

鼓励人们修改 /public 中的 404.html 的标准答案对我不起作用,因为我想使用资产中的 CSS 主题管道.有没有办法让 html 文件可以访问资产管道中定义的那些样式?如果没有,有没有办法创建一个可以访问管道的自定义错误处理程序?>

The standard answer of encouraging people to modify 404.html in /public doesn't work for me because I want to use the CSS theme that resides in the asset pipeline. Is there a way that html files can access those styles defined in the asset pipeline? If not, is there a way to create a custom error handler that has access to the pipeline?

推荐答案

对于 Rails 4.1 我喜欢这个答案,添加一个资产类型 更好;但是我还没有尝试过.在 Rails 4.0.8 上,这三个参考对我有帮助:

For Rails 4.1 I like this answer, add an asset type better; however I have not tried it. On Rails 4.0.8, these three references helped me:

  1. 动态错误页面是问题中的第二个参考.这对我来说效果很好.

  1. Dynamic error pages is the second reference in the question. This worked just fine for me.

自定义错误页面 可能是从第一个参考文献中抄袭的,或者相反,但通过添加一些有关使用 Capybara 进行测试的信息,更进一步.

Custom error pages may have cribbed from the first reference, or the other way around, but goes the extra mile by adding some information about testing with Capybara.

我没有做 Capybara 测试,因为我不想改变测试配置;但是,RSpec-Rails 请求规范 提示我独立测试这些请求并查看他们完成并返回正确的内容.

I did not do the Capybara testing because I didn't want to change the test configuration; however, RSpec-Rails Request Specs clued me in to test these requests independently and see that they complete and return the correct content.

以下是对三篇参考文献所教内容的简要说明:

What follows is a nutshell description of what is taught by the three references:

  1. 将以下设置添加到 config/environments/production.rb

# Route exceptions to the application router vs. default
config.exceptions_app = self.routes

  • 编辑路由配置,config/routes.rb 将错误页面定向到错误控制器

  • Edit the routing configuration, config/routes.rb to direct the error pages to an errors controller

      # error pages
      %w( 404 422 500 503 ).each do |code|
        get code, :to => "errors#show", :code => code
      end
    

    将把 404、422、500 和 503 页面请求路由到 errors 控制器的 show 动作,并带有一个参数 code具有状态代码的值.

    will route the 404, 422, 500, and 503 page requests to the show action of the errors controller with a parameter code that has the value of the status code.

    创建控制器,app/controllers/errors_controller.rb.以下是全部内容:

    Create the controller, app/controllers/errors_controller.rb. Here is the entire content:

    class ErrorsController < ApplicationController
    
      def show
        status_code = params[:code] || 500
        flash.alert = "Status #{status_code}"
        render status_code.to_s, status: status_code
      end
    
    end
    

    我的偏好是在 flash.alert

    自己创建页面.我使用 .erb 这里是 app/views/errors/500.html.erb

    Create the pages themselves. I use .erb Here is app/views/errors/500.html.erb

    <p>Our apology.  Your request caused an error.</p>
    <%= render 'product_description' %>
    

    所以你看到你可以渲染部分.该页面使用 app/views/layouts/application.html.erb 中的所有布局样板或您配置的任何其他布局样板呈现.这包括 <div id='alert'><%= alert %></div>,它显示来自 Flash 的状态消息.

    So you see that you can render a partial. The page renders with all of the layout boilerplate from app/views/layouts/application.html.erb or any other layout boilerplate that you have configured. That includes the <div id='alert'><%= alert %></div> that displays the status message from the flash.

    通过添加测试文件 spec/requests/errors_request_spec.rb 使用 RSpec 进行测试.以下是该文件的缩写内容,显示了对 500 状态页面的测试:

    Tested with RSpec by adding a test file, spec/requests/errors_request_spec.rb. Here is abbreviated content of that file that shows a test of the 500 status page:

    require 'rails_helper'
    
    RSpec.describe "errors", :type => :request do
    
      it "displays the 500 page" do
        get "/500"
        assert_select 'div#alert', 'Status 500'
        assert_select 'div[itemtype]'
      end
    
    end
    

    第一个断言检查闪光警报.第二个断言检查部分.

    The first assertion checks for the flash alert. The second assertion checks for the partial.

    这篇关于Rails:如何创建使用资产管道的自定义 404 错误页面?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆