我遵循约会here:我们不应该直接使用错误代码,而是使用其符号。例如:
# bad
...
render status: 500
...
# good
...
render status: :forbidden
...
但实际上,这些数字还没有被宣布,所以如果我想使用,我必须使用:
Rack::Utils::SYMBOL_TO_STATUS_CODE[:bad_request]
这很乱。我的问题是:我如何包含/扩展模块Rake::Utils
所以我只需要使用:bad_request
答案 0 :(得分:0)
从rails控制台使用Rails 4.2.5.1,执行:
Rack::Utils::SYMBOL_TO_STATUS_CODE[:bad_request]
我得到400
做Rack::Utils::SYMBOL_TO_STATUS_CODE
。我可以看到所有这些状态......
{
:continue=>100,
:switching_protocols=>101,
:processing=>102,
:ok=>200,
:created=>201,
:accepted=>202,
:non_authoritative_information=>203,
:no_content=>204,
:reset_content=>205,
:partial_content=>206,
:multi_status=>207,
:already_reported=>208,
:im_used=>226,
:multiple_choices=>300,
:moved_permanently=>301,
:found=>302,
:see_other=>303,
:not_modified=>304,
:use_proxy=>305,
:temporary_redirect=>307,
:permanent_redirect=>308,
:bad_request=>400,
:unauthorized=>401,
:payment_required=>402,
:forbidden=>403,
:not_found=>404,
:method_not_allowed=>405,
:not_acceptable=>406,
:proxy_authentication_required=>407,
:request_timeout=>408,
:conflict=>409,
:gone=>410,
:length_required=>411,
:precondition_failed=>412,
:payload_too_large=>413,
:uri_too_long=>414,
:unsupported_media_type=>415,
:range_not_satisfiable=>416,
:expectation_failed=>417,
:unprocessable_entity=>422,
:locked=>423,
:failed_dependency=>424,
:upgrade_required=>426,
:precondition_required=>428,
:too_many_requests=>429,
:request_header_fields_too_large=>431,
:internal_server_error=>500,
:not_implemented=>501,
:bad_gateway=>502,
:service_unavailable=>503,
:gateway_timeout=>504,
:http_version_not_supported=>505,
:variant_also_negotiates=>506,
:insufficient_storage=>507,
:loop_detected=>508,
:not_extended=>510,
:network_authentication_required=>511
}
我认为您不需要定义任何新状态。 如果您还需要这样做,可以使用初始化程序添加它:
/my_app/config/initializers/codes.rb
Rack::Utils::SYMBOL_TO_STATUS_CODE[:my_code] = 666
然后在控制器中:
class Api::V1::RegionsController < Api::V1::BaseController
def index
respond_with Region.all, status: :my_code
end
end
如您所见,我正在返回自定义代码。