从视图中设置标题状态
Posted
技术标签:
【中文标题】从视图中设置标题状态【英文标题】:Setting header status from view 【发布时间】:2016-10-25 01:38:54 【问题描述】:我有一个查看页面errors/401
。这专门用于显示状态为 401 的错误,我总是希望以状态 401 呈现该页面。在呈现该页面的控制器中,我这样写
render "error/401", status: 401
我觉得这是多余的。由于此页面始终以特定状态呈现,因此我想在视图页面中指定状态,而不是在控制器中提及,并获得相同的结果。我只想写:
render "error/401"
这可能吗?
【问题讨论】:
我不确定这是否可能,但由于您使用控制器/视图来返回自定义错误页面。除非您另有说明,否则 rails 控制器将始终将status: 200
添加到您的响应标头中
不,因为您的服务器处理请求/响应 - 在这种情况下是控制器。控制器应该负责您的响应和响应的请求标头,其中包括状态。在您看来,您不应该这样做。话虽如此,您可以将此文件创建为 public/401.html,而您只是说status: 401
网络服务器将服务于 public/401.html。但是,这个 401.html 将是一个静态 HTML 文件,将无法解析其中的任何 ruby 代码。
【参考方案1】:
我想在视图页面中指定状态,不在控制器中提及它
它不属于你的观点。模板应该输出字符,而不是 HTTP 状态代码。
我觉得这是多余的。
是的。 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
【讨论】:
以上是关于从视图中设置标题状态的主要内容,如果未能解决你的问题,请参考以下文章