Rails 3 - Скрепка: неинициализированная константа ActionDispatch :: Request :: UploadedFile - PullRequest
1 голос
/ 18 ноября 2010

У меня сбивающая с толку ошибка:

Я запускаю Rails 3.0.0 на Ruby 1.9.2 с Paperclip 2.3.5.

При загрузке файла я получаю ошибку 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, но я понятия не имею, почему это происходит здесь.Кто-нибудь может мне помочь с поиском проблемы?

Спасибо!Валентин

ДОБАВЛЕН config / initializers / 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

1 Ответ

0 голосов
/ 19 ноября 2010

tadman (Спасибо!) Указал мне на правильное решение: все, что мне нужно было сделать, это изменить значение с tempfile на to_tempfile.Вероятно, этого не случится со слишком многими людьми, но я подумал, что упомяну, потому что вокруг него произошла аналогичная дискуссия из-за недавнего изменения стабильных рельсов 3.0.3, созданного tenderlove, что с философской точки зрения абсолютно правильно - но отбросилонекоторые люди ...

Итак, вот измененный фрагмент fix_params.rb

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

Приветствия,

Val

...