модуль ActionController::ParameterEncoding::ClassMethods
Публичные методы экземпляров
# File actionpack/lib/action_controller/metal/parameter_encoding.rb, line 77 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. Это полезно в тех случаях, когда приложение должно обрабатывать данные, но кодировка данных неизвестна, например, данные файловой системы.
# File actionpack/lib/action_controller/metal/parameter_encoding.rb, line 48
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–2020 David Heinemeier Hansson
Licensed under the MIT License.