在Rails中返回特定的http状态代码


Answers:


82

对于整个应用程序:

# ApplicationController
before_filter :return_unavailable_status

private
  def return_unavailable_status
    render :nothing => true, :status => :service_unavailable
  end

如果需要自定义错误页面,可以执行以下操作:

render 'custom_unavailable_page', :status => :service_unavailable    

如果您不希望将其用于特定控制器:

# SomeController
skip_before_filter :return_unavailable_status

要显示自定义下页,我应使用,render "custom_unavailable_page"而不是render :nothing => true
Sathish Manohar

1
@SathishManohar确实如此。 custom_unavailable_page将是您将呈现的视图文件的名称。
iwasrobbed 2012年

1
在哪里记录?其他状态是什么?api.rubyonrails.org/classes/ActionView/Helpers/…–
Chloe

3
@Chloe我不认为它的记录很好,但是这里是apidock.com/rails/ActionController/Base/…
iwasrobbed 2014年

1
弃用警告::nothing不推荐使用该选项,并将在Rails 5.1中将其删除。使用head方法对空的回应主体进行回应
juliangonzalez

102

您可以使用 head

head 503
# or
head :service_unavailable

11
我可以用社会地位的象征,如:service_unavailable所有状态:apidock.com/rails/ActionController/Base/...
freemanoid

1
@freemanoid:我个人更喜欢整数代码。我已经知道了 无需记住另一组价值观。
塞尔吉奥·图伦采夫

3
弃用警告::nothing不推荐使用该选项,并将在Rails 5.1中将其删除。使用head方法对空的回应主体进行回应
juliangonzalez

1
@SergioTulentsev我只更新要使用的答案head,如果您想保留后代的原始答案,请在下面输入“原始答案”或类似内容。我认为我们都可以同意这head是要走的路,特别是因为render nothing: true当前的Rails版本已弃用。
约书亚·品特

1
@JoshuaPinter:的确如此。我在想什么
塞尔吉奥·图伦采夫

1

以下对我有用:

format.any { render :json => {:response => 'Unable to authenticate' },:status => 401  }

:response对HTML响应以防万一它是从浏览器访问。

渲染头503似乎不适用于以上陈述。


1
这对SEO不利。例如,谷歌会认为这是一个损坏的网站,而不仅仅是暂时关闭但有望备份的网站。看到这个:yoast.com/http-503-site-maintenance-seo
labyrinth

可能值得将其更改为“服务不可用” / 503,因此它与问题的目的相符。我认为这不是对您有用的“渲染头”语法,而不是错误代码?
mwfearnley
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.