ruby 在Rails中添加自定义HTTP状态码符号

l3zydbqr  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(86)

**背景:**一般来说,在我们想要手动指定在响应中返回的HTTP状态码的情况下,Rails会给我们一组很好的预定义的人类可读的Ruby符号,而不是显式地使用这些代码的数值。

我们可以这样做,例如:

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状态码的新符号表示?

slmsl1lt

slmsl1lt1#

  • 我在写问题的时候找到了答案。由于我找不到任何重复目前在SO,我将张贴此答案的情况下,其他人有同样的问题。*

符号表示-HTTP状态码Map的初始集合位于Rack::Utils模块中,在一个名为SYMBOL_TO_STATUS_CODE的可访问散列中。此外,人类可读的状态码Map位于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.6ms|活动记录:12.0ms)

相关问题