后台:通常,在我们想要手动指定要在响应中返回的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中没有符号表示,所以我必须使用实际的数值。
当前解决方案:为了使其在代码中保持相对人性化,我在常量文件中放置了一个常量,如下所示:
初始化/ constants.rb
NEEDS_UPDATE_CODE = 242
在我的控制器中,我这样渲染:
render text: "whatever I want to render", status: NEEDS_UPDATE_CODE
问题这显然效果很好,但我想知道,有没有办法为Rails添加自定义HTTP状态代码的新符号表示?
答案 0 :(得分:8)
我在写这个问题时找到了答案。由于我现在找不到任何重复的内容,我会发布这个答案,以防其他人有同样的问题。
符号表示的初始集 - 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"
因此,当使用此代码完成请求时,我的日志将显示:
完成242个应用程序需求更新363ms(浏览次数:8.6ms | ActiveRecord:12.0ms)