2015-03-21 3 views
3

Я вижу, что я могу фильтровать ключи из журналов Rails here, но не совсем ясно, как я могу фильтровать ключ, вложенный внутри хэша параметра.Как фильтровать вложенные параметры из журналов Rails

Мой Params хэш выглядит следующим образом:

{"download"=>{"attachment_id"=>"54039", "data"=>"data:image/png;base64,iVBORw0..."}} 

Где params[:download][:data] является строка base64. Это большой объем данных, и я хотел бы удалить его из своих журналов.

Возможно ли это?

Я использую Rails 4.0.4

+0

Вы попробовали 'config.filter_parameters << {скачать:: data}'? –

ответ

0

Я думаю, самый прямой способ заключается в monkeypatch Rails код для фильтрации параметров в вашей config/initializers/filter_parameter_logging.rb:

# monkeypatch to filter nested parameters 
class ActionDispatch::Http::ParameterFilter::CompiledFilter 
    def call(original_params, path = []) 
    filtered_params = {} 

    original_params.each do |key, value| 
     if regexps.any? { |r| key =~ r || (path + [key]).join('/') =~ r } 
     value = ActionDispatch::Http::ParameterFilter::FILTERED 
     elsif value.is_a?(Hash) 
     value = call(value, path + [key]) 
     elsif value.is_a?(Array) 
     value = value.map { |v| v.is_a?(Hash) ? call(v, path + [key]) : v } 
     elsif blocks.any? 
     key = key.dup 
     value = value.dup if value.duplicable? 
     blocks.each { |b| b.call(key, value) } 
     end 

     filtered_params[key] = value 
    end 

    filtered_params 
    end 
end 

, а затем:

Rails.application.config.filter_parameters += ['download/data']

3

Проще говоря это в приложении.rb:

config.filter_parameters + = [: данные]

Это будет фильтровать вложенные [: данные] ключи также.

В рельсам 5, вы можете определить иерархию ключа:

config.filter_parameters + = [ "download.data"]

Это отфильтровывать все [: данные] ключи которые имеют [: скачать] в качестве непосредственного родителя.

+1

hmm, это работает достаточно хорошо, но могу ли я указать, что 'download' должен быть только клавишей верхнего уровня? – mehulkar

+0

Нет. Но в Rails 5 вы можете определить, что загрузка должна быть дочерней для определенного родительского ключа. Подробности здесь https://github.com/rails/rails/pull/13897 –

Смежные вопросы