Rails: ParameterFilter :: compiled_filter пытается дублировать символ - PullRequest
5 голосов
/ 10 марта 2011

Я использую rails3 с гемом уведомлений об исключениях для rails. Когда возникает исключение, и электронное письмо должно быть отправлено, я получаю исключение из класса ParameterFilter. Я нашел проблему в источнике рельсов, и я не уверен, что лучший способ продолжить.

Проблема возникает в ActionDispatch :: Http :: ParameterFilter. В методе compiled_filter в строке 38 возникает ошибка: key = key.dup, когда key является символом, поскольку символы не дублируются. Вот источник:

def compiled_filter
    ...
    elsif blocks.present?
        key = key.dup
        value = value.dup if value.duplicable?
        blocks.each { |b| b.call(key, value) }
    end

Я вижу, что они звонят dup на value только тогда, когда duplicable. Если я исправлю источник для вызова только dup на key, когда key равен duplicable, то моя проблема исчезнет. Я предполагаю, что есть причина, по которой автор поставил это условие на value, а не key, поэтому мне любопытно, если кто-то там лучше понимает этот код.

Эта ошибка возникает, только когда вы добавляете блок к параметрам фильтра в application.rb. Так что, возможно, есть обходной путь для моей первоначальной проблемы, который не требует использования блока здесь. Если вам интересно, посмотрите вопрос моего коллеги Rails: фильтрация конфиденциальных данных в параметре JSON из журналов

Ключ, для которого это проблема, - :action. Это происходит от рельсов, и я не знаю, есть ли способ заставить его быть строкой.

Я подал ошибку rails https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter, и у меня есть готовый патч, который добавляет, если key.duplicable? к строке key.dup, я ищу информацию о том, является ли это правильным решением.

1 Ответ

2 голосов
/ 19 марта 2011

Это похоже на ошибку в Rails.Либо ключ должен быть строкой, а не символом, либо dup должен быть защищен duplicable?.

. Вы должны сообщить об ошибке на https://rails.lighthouseapp.com/,, включая минимальный тестовый пример, если это возможно.

...