Rails:ParameterFilter :: compiled_filter尝试复制符号

我正在运行带有rails exception-notifier gem的rails3。 当发生exception,并且应该发送电子邮件时,我从ParameterFilter类中获得exception。 我在rails源中发现了这个问题,我不确定最好的方法。

问题发生在ActionDispatch :: Http :: ParameterFilter中。 在compiled_filter方法中,第38行发生错误: key = key.dupkey是符号时,因为符号不可复制。 这是来源:

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

我看到它们只有在可duplicable时才调用dup value 。 如果我修补源只能在keyduplicable时调用key ,那么我的问题就会消失。 我假设有一个原因让作者把这个条件放在value而不是key ,所以我很好奇是否有人对这个代码有了更好的理解。

只有在application.rb中向filter参数添加块时才会出现此错误。 所以,也许我的原始问题有一个解决方法,不需要在这里使用块。 如果您有兴趣,请参阅我的同事的问题Rails:从日志中过滤JSON参数中的敏感数据

这是一个问题的关键是:action 。 这来自rails,我不知道是否有任何方法可以强制它成为字符串。

我提交了一个rails bug https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter我准备好了补丁,如果key.duplicable?key.dup行,我正在寻找关于这是否是正确解决方案的输入。

这看起来像是Rails中的一个错误。 密钥应该是字符串而不是符号,或者dup应该是可重复保护的duplicable?

您应该在https://rails.lighthouseapp.com/上提交一个错误,如果可能的话,包括一个最小的测试用例。