Spec-Zone.ru › Ruby on Rails 8.1

модуль ActionController::ParameterEncoding::ClassMethods

Общедоступные методы экземпляра

param_encoding (action, param, encoding) Показать исходный код
# 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

Задаёт кодировку параметра для действия. Если кодировка не указана, используется UTF-8.

Можно указать двоичный параметр (ASCII_8BIT) следующим образом:

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

Параметр file_path действия show будет закодирован в ASCII-8BIT, а все остальные аргументы останутся в кодировке UTF-8. Это полезно в случаях, когда приложению необходимо обрабатывать данные с неизвестной кодировкой, например данные файловой системы.

skip_parameter_encoding (action) Показать исходный код
# 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

Указывает, что все параметры заданного действия должны быть закодированы в ASCII-8BIT (то есть кодировка UTF-8 по умолчанию «пропускается»).

Например, в контроллере этот метод можно использовать так:

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

Все значения параметров действия show в приведённом выше контроллере будут закодированы в ASCII-8BIT. Это полезно в случаях, когда приложению необходимо обрабатывать данные с неизвестной кодировкой, например данные файловой системы.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API