从视图中设置 header 状态
Setting header status from view
我有一个查看页面 errors/401
。这是专门用于显示状态为 401 的错误,我一直想渲染状态为 401 的页面。在渲染该页面的控制器中,我这样写
render "error/401", status: 401
我觉得这是多余的。由于此页面始终以特定状态呈现,因此我想在视图页面中指定状态,而不是在控制器中提及它,并获得相同的结果。我只想写:
render "error/401"
这可能吗?
I want to specify the status within the view page, not mention it in the controller
不属于你的观点。模板应该输出字符,而不是 HTTP 状态代码。
I feel this is redundant.
是的。 Rails 使用异常来指示和处理此类错误,例如丢失的记录会导致 ActiveRecord::RecordNotFound
异常,进而呈现 404 页面。
您可以通过在 ApplicationController
:
中定义通过 rescue_from
传递的 NotAuthorised
错误来执行相同的操作
class ApplicationController < ActionController::Base
class NotAuthorised < StandardError; end
rescue_from NotAuthorised do |exception|
render 'error/401', status: 401
end
end
来自另一个控制器:
class FooController < ApplicationController
def index
raise NotAuthorised
end
end
我有一个查看页面 errors/401
。这是专门用于显示状态为 401 的错误,我一直想渲染状态为 401 的页面。在渲染该页面的控制器中,我这样写
render "error/401", status: 401
我觉得这是多余的。由于此页面始终以特定状态呈现,因此我想在视图页面中指定状态,而不是在控制器中提及它,并获得相同的结果。我只想写:
render "error/401"
这可能吗?
I want to specify the status within the view page, not mention it in the controller
不属于你的观点。模板应该输出字符,而不是 HTTP 状态代码。
I feel this is redundant.
是的。 Rails 使用异常来指示和处理此类错误,例如丢失的记录会导致 ActiveRecord::RecordNotFound
异常,进而呈现 404 页面。
您可以通过在 ApplicationController
:
rescue_from
传递的 NotAuthorised
错误来执行相同的操作
class ApplicationController < ActionController::Base
class NotAuthorised < StandardError; end
rescue_from NotAuthorised do |exception|
render 'error/401', status: 401
end
end
来自另一个控制器:
class FooController < ApplicationController
def index
raise NotAuthorised
end
end