【问题标题】:Adding custom HTTP status code symbols添加自定义 HTTP 状态代码符号
【发布时间】:2016-10-21 23:07:57
【问题描述】:

背景: 通常,在我们想要手动指定响应中返回的 HTTP 状态码的情况下,Rails 会为我们提供a nice set of pre-defined human-readable Ruby symbols 来使用,而不是显式地使用数值那些代码。

我们可以做如下的事情,例如:

render text: "hurray!", status: :ok

这当然最终是一样的:

render text: "hurray!", status: 200

在我的情况下,我想呈现一个自定义 HTTP 状态代码(我随意选择了数字 242)。显然,这段代码不是标准的,并且在 Rails 中没有符号表示,所以我必须使用实际的数值。

当前解决方案:为了使其在代码中相对易于阅读,我在我的一个常量文件中放置了一个常量,如下所示:

initializers/constants.rb

NEEDS_UPDATE_CODE = 242

在我的控制器中,我渲染如下:

render text: "whatever I want to render", status: NEEDS_UPDATE_CODE

问题:这显然工作得很好,但我想知道,有没有办法为 Rails 的自定义 HTTP 状态代码添加新的符号表示?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 http-status-codes


    【解决方案1】:

    我在写问题时找到了答案。由于我目前在 SO 上找不到任何重复项,因此我将发布此答案以防其他人有相同的问题。

    符号表示的初始集-HTTP 状态代码映射位于Rack::Utils 模块中,位于称为SYMBOL_TO_STATUS_CODE 的可访问散列中。此外,人类可读的状态码映射位于HTTP_STATUS_CODES

    为了在我的代码中使用符号表示,我只是在我的初始化程序中添加了这个:

    Rack::Utils::SYMBOL_TO_STATUS_CODE[:application_needs_update] = 242
    

    这让我可以像这样使用那个符号:

    render text: "whatever I want to render", status: :application_needs_update
    

    很遗憾,rails 日志只会显示状态码,例如:

    Completed 242 in 363ms (Views: 8.6ms | ActiveRecord: 12.0ms)

    这对于不熟悉我的自定义代码的人来说并不是很有帮助。为了纠正这个问题,我可以将它添加到同一个文件中:

    Rack::Utils::HTTP_STATUS_CODES[242] = "Application Needs Update"
    

    因此,当使用此代码完成请求时,我的日志将显示:

    在 363 毫秒内完成 242 次应用需求更新(查看次数:8.6 毫秒 | ActiveRecord:12.0 毫秒)

    【讨论】:

    • @Kuldeep 到目前为止,我知道,应该不错。我不知道任何其他方法,缺少一些可以为您抽象出这一切的宝石。你在担心什么吗?
    猜你喜欢
    • 2015-09-10
    • 2014-08-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2014-06-17
    相关资源
    最近更新 更多