【问题标题】:Rails 3 - Paperclip: uninitialized constant ActionDispatch::Request::UploadedFileRails 3 - 回形针:未初始化的常量 ActionDispatch::Request::UploadedFile
【发布时间】:2010-11-19 17:44:17
【问题描述】:

我有一个令人困惑的错误:

我使用 Paperclip 2.3.5 在 Ruby 1.9.2 上运行 Rails 3.0.0。

当我上传文件时,我收到 500 错误。

NameError (uninitialized constant ActionDispatch::Request::UploadedFile):
  config/initializers/fix_params.rb:13:in `normalize_parameters'
  config/initializers/fix_params.rb:19:in `block in normalize_parameters'
  config/initializers/fix_params.rb:19:in `each'
  config/initializers/fix_params.rb:19:in `normalize_parameters'
  config/initializers/fix_params.rb:19:in `block in normalize_parameters'
  config/initializers/fix_params.rb:19:in `each'
  config/initializers/fix_params.rb:19:in `normalize_parameters'

Rendered /Users/vjmayr/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (10.2ms)

我已经看到 Rails 3.0.2 和 .3 发生了类似的事情,但我不知道为什么会在这里发生。有人帮我找出问题吗?

谢谢!瓦伦丁

添加配置/初始化程序/fix_params.rb:

module ActionController
  class Request
    private

      # Convert nested Hashs to HashWithIndifferentAccess and replace
      # file upload hashs with UploadedFile objects
      def normalize_parameters(value)
        case value
        when Hash
          if value.has_key?(:tempfile)
            upload = value[:tempfile]
            upload.extend(UploadedFile)
            upload.original_path = value[:filename]
            upload.content_type = value[:type]
            upload
          else
            h = {}
            value.each { |k, v| h[k] = normalize_parameters(v) }
            h.with_indifferent_access
          end
        when Array
          value.map { |e| normalize_parameters(e) }
       else
          value.force_encoding(Encoding::UTF_8) if value.respond_to?(:force_encoding)
          value
         end
      end
  end
end

【问题讨论】:

  • 您可能想查看config/initializers/fix_params.rb,因为这是Rails 的某种非标准扩展,它可能会出现故障。也许您可以修改问题并添加有关其中内容的详细信息。
  • 嗨,tadman,我在我的问题中添加了 fix_params.rb。我将其与原始安装保持不变。

标签: ruby-on-rails paperclip


【解决方案1】:

tadman(谢谢!)为我指出了正确的解决方案: 我所要做的就是将值从 tempfile 更改为 to_tempfile。这可能不会发生在太多人身上,但我想我会提到,因为最近有一个类似的讨论围绕着这个问题,因为最近对稳定的 rails 3.0.3 进行了更改,这在哲学上是绝对正确的——但被抛弃了有些人...

这里是 fix_params.rb 的修改片段

...
if value.has_key?(:to_tempfile)
        upload = value[:to_tempfile]
...

干杯,

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多