如何从rails控制器动作发出404响应?

时间:2009-04-23 00:13:55

标签: ruby-on-rails

从rails控制器操作发出404响应的首选方法是什么?

7 个答案:

答案 0 :(得分:36)

这似乎很好......

# Rails 2 and below
render :file => "#{RAILS_ROOT}/public/404.html",  :status => 404

# Rails 3 and up
render :file => "#{Rails.root}/public/404.html",  :status => 404

答案 1 :(得分:33)

你也可以

raise ActiveRecord::RecordNotFound

异常。

答案 2 :(得分:27)

以下方式对我来说是最好的:

raise ActionController::RoutingError.new('Not Found')

或只是

raise ActionController::RoutingError, 'Not Found'

或者还有一些其他解决方案: How to redirect to a 404 in Rails?

答案 3 :(得分:6)

Reference

render :file => '/path/to/some/filenotfound.rhtml', 
                status => 404, :layout => true

答案 4 :(得分:6)

在ApplicationController中定义一个类似的方法:

def render_404
  render :file => "#{RAILS_ROOT}/public/404.html",  :status => 404
end

答案 5 :(得分:1)

在Rails 5中,您可以使用

head 404

这会将您的操作的响应代码设置为404。如果您在操作方法之后立即返回,则您的操作将回复404,而不是实际的身体。这在您开发API端点时可能很有用,但对于最终用户HTTP请求,您可能更喜欢某些可见的主体来通知用户该错误。

答案 6 :(得分:0)

如果您想在重定向上发布状态代码(例如302),可以将其放在ArrayBuffer中: routes.rb
但是,这只适用于重定向,而不是直接加载页面。