问题

我想在Rails中"伪造"404页面.在PHP中,我只是发送一个带有错误代码的头:

header("HTTP/1.0 404 Not Found");

如何使用Rails?



解决方法

不要自己渲染404,没有理由; Rails已经内置了这个功能.如果要显示404页面,请在 ApplicationController 中创建 render_404 方法(或按我调用它的 not_found ):

def not_found
  raise ActionController::RoutingError.new('Not Found')
end

Rails也以同样的方式处理 AbstractController :: ActionNotFound ActiveRecord :: RecordNotFound .

这有两件事更好:

1)它使用内置在 rescue_from 处理程序中的Rails来呈现404页面, 2)它会中断你的代码的执行,让你做很好的事情,如:

  user = User.find_by_email(params[:email]) or not_found
  user.do_something!

而不必编写丑陋的条件语句.

作为一个奖励,它也是超级容易处理在测试.例如,在rspec集成测试中:

# RSpec 1

lambda {
  visit '/something/you/want/to/404'
}.should raise_error(ActionController::RoutingError)

# RSpec 2+

expect {
  get '/something/you/want/to/404'
}.to raise_error(ActionController::RoutingError)



相关问题推荐