从视图中设置 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