Module: ActionDispatch::Http::Parameters

Extended by:
ActiveSupport::Concern
Included in:
Request
Defined in:
actionpack/lib/action_dispatch/http/parameters.rb

Defined Under Namespace

Modules: ClassMethods Classes: ParseError

Constant Summary collapse

PARAMETERS_KEY =
"action_dispatch.request.path_parameters"
DEFAULT_PARSERS =
{
  Mime[:json].symbol => -> (raw_post) {
    data = ActiveSupport::JSON.decode(raw_post)
    data.is_a?(Hash) ? data : { _json: data }
  }
}

Instance Method Summary collapse

Methods included from ActiveSupport::Concern

append_features, class_methods, extended, included

Instance Method Details

#parametersObject Also known as: params

Returns both GET and POST parameters in a single hash.


50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 50

def parameters
  params = get_header("action_dispatch.request.parameters")
  return params if params

  params = begin
             request_parameters.merge(query_parameters)
           rescue EOFError
             query_parameters.dup
           end
  params.merge!(path_parameters)
  params = set_binary_encoding(params, params[:controller], params[:action])
  set_header("action_dispatch.request.parameters", params)
  params
end

#path_parametersObject

Returns a hash with the parameters used to form the path of the request. Returned hash keys are strings:

{'action' => 'my_action', 'controller' => 'my_controller'}

83
84
85
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 83

def path_parameters
  get_header(PARAMETERS_KEY) || set_header(PARAMETERS_KEY, {})
end

#path_parameters=(parameters) ⇒ Object

:nodoc:


66
67
68
69
70
71
72
73
74
75
76
77
# File 'actionpack/lib/action_dispatch/http/parameters.rb', line 66

def path_parameters=(parameters) #:nodoc:
  delete_header("action_dispatch.request.parameters")

  parameters = set_binary_encoding(parameters, parameters[:controller], parameters[:action])
  # If any of the path parameters has an invalid encoding then
  # raise since it's likely to trigger errors further on.
  Request::Utils.check_param_encoding(parameters)

  set_header PARAMETERS_KEY, parameters
rescue Rack::Utils::ParameterTypeError, Rack::Utils::InvalidParameterError => e
  raise ActionController::BadRequest.new("Invalid path parameters: #{e.message}")
end