从rails控制器操作发出404响应的首选方式是什么?
jjjwad0x1#
这似乎很好...
# 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
emeijp432#
您还可以raise ActiveRecord::RecordNotFound例外.
raise ActiveRecord::RecordNotFound
xmakbtuz3#
以下方法对我来说是最好的:
raise ActionController::RoutingError.new('Not Found')
或只是
raise ActionController::RoutingError, 'Not Found'
或者还有一些其他的解决方案:How to redirect to a 404 in Rails?
j2cgzkjk4#
Reference:
render :file => '/path/to/some/filenotfound.rhtml', status => 404, :layout => true
6xfqseft5#
在Rails 5中,您可以使用
head 404
这会将您的操作的响应代码设置为404。如果在此之后立即从action方法返回,则action将响应404,而没有实际的body。当您开发API端点时,这可能很有用,但是对于最终用户HTTP请求,您可能更喜欢一些可见的主体来通知用户错误。
404
du7egjpx6#
在ApplicationController中定义一个方法,如:
def render_404 render status: 404, layout: false file: Rails.root.join("public/404.html") end
slwdgvem7#
如果你想在重定向时发出一个状态码(例如,302),你可以把它放在routes.rb:get "/somewhere", to: redirect("/somewhere_else", status: 302)。但是,这只适用于重定向,而不是直接加载页面。
routes.rb
get "/somewhere", to: redirect("/somewhere_else", status: 302)
7条答案
按热度按时间jjjwad0x1#
这似乎很好...
emeijp432#
您还可以
raise ActiveRecord::RecordNotFound
例外.
xmakbtuz3#
以下方法对我来说是最好的:
或只是
或者还有一些其他的解决方案:How to redirect to a 404 in Rails?
j2cgzkjk4#
Reference:
6xfqseft5#
在Rails 5中,您可以使用
这会将您的操作的响应代码设置为
404
。如果在此之后立即从action方法返回,则action将响应404
,而没有实际的body。当您开发API端点时,这可能很有用,但是对于最终用户HTTP请求,您可能更喜欢一些可见的主体来通知用户错误。du7egjpx6#
在ApplicationController中定义一个方法,如:
slwdgvem7#
如果你想在重定向时发出一个状态码(例如,302),你可以把它放在
routes.rb
:get "/somewhere", to: redirect("/somewhere_else", status: 302)
。但是,这只适用于重定向,而不是直接加载页面。