Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从视图设置标题状态_Ruby On Rails_Ruby_View_Http Status Codes - Fatal编程技术网

Ruby on rails 从视图设置标题状态

Ruby on rails 从视图设置标题状态,ruby-on-rails,ruby,view,http-status-codes,Ruby On Rails,Ruby,View,Http Status Codes,我有一个查看页面错误/401。这是专门用于显示401状态的错误,我总是希望呈现401状态的页面。在呈现该页面的控制器中,我编写 render "error/401", status: 401 我觉得这是多余的。由于此页面始终以特定状态呈现,因此我希望在视图页面中指定状态,更不用说在控制器中指定状态,并获得相同的结果。我只想写: render "error/401" 这可能吗 我想在视图页面中指定状态,更不用说在控制器中了 这不属于你的观点。模板应该输出字符,而不是HTTP状态代码 我觉得这是

我有一个查看页面
错误/401
。这是专门用于显示401状态的错误,我总是希望呈现401状态的页面。在呈现该页面的控制器中,我编写

render "error/401", status: 401
我觉得这是多余的。由于此页面始终以特定状态呈现,因此我希望在视图页面中指定状态,更不用说在控制器中指定状态,并获得相同的结果。我只想写:

render "error/401"
这可能吗

我想在视图页面中指定状态,更不用说在控制器中了

这不属于你的观点。模板应该输出字符,而不是HTTP状态代码

我觉得这是多余的

是的。Rails使用异常来发出信号并处理此类错误,例如,丢失的记录会导致出现
ActiveRecord::RecordNotFound
异常,从而呈现404页面

您可以通过在
应用程序控制器中定义一个
notauthorized
错误来执行相同的操作:

class ApplicationController < ActionController::Base
  class NotAuthorised < StandardError; end

  rescue_from NotAuthorised do |exception|
    render 'error/401', status: 401
  end
end
class ApplicationController
从另一个控制器:

class FooController < ApplicationController
  def index
    raise NotAuthorised
  end
end
class FooController
我不确定这是否可行,但因为您正在使用controller/view返回自定义错误页。。rails控制器总是将
状态:200
添加到您的响应头中,除非您另外提到否,因为您的服务器处理请求/响应,在本例中,请求/响应就是控制器。控制器应该负责您的响应和响应的请求头,其中包括状态。在你看来,你不应该这样做。也就是说,您可以将此文件创建为public/401.html,而您只需说
status:401
web服务器将为public/401.html提供服务。然而,这个401.html将是一个静态html文件,无法解析其中的任何ruby代码。