Rails:如何包含Rack :: Utils

时间:2017-04-01 19:46:47

标签: ruby-on-rails

我遵循约会here:我们不应该直接使用错误代码,而是使用其符号。例如:

# bad
...
render status: 500
...

# good
...
render status: :forbidden
...

但实际上,这些数字还没有被宣布,所以如果我想使用,我必须使用:

Rack::Utils::SYMBOL_TO_STATUS_CODE[:bad_request]

这很乱。我的问题是:我如何包含/扩展模块Rake::Utils所以我只需要使用:bad_request

1 个答案:

答案 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

如您所见,我正在返回自定义代码。

postman example returning custom code