Module: ActionController::ParameterEncoding::ClassMethods
- Defined in:
- actionpack/lib/action_controller/metal/parameter_encoding.rb
Instance Method Summary collapse
- 
  
    
      #action_encoding_template(action)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    :nodoc:. 
- 
  
    
      #inherited(klass)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    :nodoc:. 
- 
  
    
      #param_encoding(action, param, encoding)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Specify the encoding for a parameter on an action. 
- 
  
    
      #setup_param_encode  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    :nodoc:. 
- 
  
    
      #skip_parameter_encoding(action)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Specify that a given action’s parameters should all be encoded as ASCII-8BIT (it “skips” the encoding default of UTF-8). 
Instance Method Details
#action_encoding_template(action) ⇒ Object
:nodoc:
| 20 21 22 23 24 | # File 'actionpack/lib/action_controller/metal/parameter_encoding.rb', line 20 def action_encoding_template(action) # :nodoc: if @_parameter_encodings.has_key?(action.to_s) @_parameter_encodings[action.to_s] end end | 
#inherited(klass) ⇒ Object
:nodoc:
| 11 12 13 14 | # File 'actionpack/lib/action_controller/metal/parameter_encoding.rb', line 11 def inherited(klass) # :nodoc: super klass.setup_param_encode end | 
#param_encoding(action, param, encoding) ⇒ Object
Specify the encoding for a parameter on an action. If not specified the default is UTF-8.
You can specify a binary (ASCII_8BIT) parameter with:
class RepositoryController < ActionController::Base
  # This specifies that file_path is not UTF-8 and is instead ASCII_8BIT
  param_encoding :show, :file_path, Encoding::ASCII_8BIT
  def show
    @repo = Repository.find_by_filesystem_path params[:file_path]
    # params[:repo_name] remains UTF-8 encoded
    @repo_name = params[:repo_name]
  end
  def index
    @repositories = Repository.all
  end
end
The file_path parameter on the show action would be encoded as ASCII-8BIT, but all other arguments will remain UTF-8 encoded. This is useful in the case where an application must handle data but encoding of the data is unknown, like file system data.
| 79 80 81 | # File 'actionpack/lib/action_controller/metal/parameter_encoding.rb', line 79 def param_encoding(action, param, encoding) @_parameter_encodings[action.to_s][param.to_s] = encoding end | 
#setup_param_encode ⇒ Object
:nodoc:
| 16 17 18 | # File 'actionpack/lib/action_controller/metal/parameter_encoding.rb', line 16 def setup_param_encode # :nodoc: @_parameter_encodings = Hash.new { |h, k| h[k] = {} } end | 
#skip_parameter_encoding(action) ⇒ Object
Specify that a given action’s parameters should all be encoded as ASCII-8BIT (it “skips” the encoding default of UTF-8).
For example, a controller would use it like this:
class RepositoryController < ActionController::Base
  skip_parameter_encoding :show
  def show
    @repo = Repository.find_by_filesystem_path params[:file_path]
    # `repo_name` is guaranteed to be UTF-8, but was ASCII-8BIT, so
    # tag it as such
    @repo_name = params[:repo_name].force_encoding 'UTF-8'
  end
  def index
    @repositories = Repository.all
  end
end
The show action in the above controller would have all parameter values encoded as ASCII-8BIT. This is useful in the case where an application must handle data but encoding of the data is unknown, like file system data.
| 50 51 52 | # File 'actionpack/lib/action_controller/metal/parameter_encoding.rb', line 50 def skip_parameter_encoding(action) @_parameter_encodings[action.to_s] = Hash.new { Encoding::ASCII_8BIT } end |