чем заменить модуль ActionController :: UploadedFile? - PullRequest
2 голосов
/ 07 июля 2011

Я слишком долго пытался привести пример с рокерами-демократами для сохранения сгенерированного PDF в Amazon S3 с Rails 3.0.7. Похоже, что ActionController :: UploadedFile был заменен ActionDispatch :: Http :: UploadedFile, но я получаю ошибку 'wrong argument type Class (expected Module)' при попытке использовать этот класс для расширения моего файлового объекта.

Вот источник. Я неправильно использую «extension»? Как я могу сделать то, что я пытаюсь сделать здесь? На самом деле все, что я хочу сделать, это указать имя файла, который будет загружен на S3 с помощью Paperclip.

def create_pdfdoc(document_content)
  DocRaptor.create(  :document_content => document_content, 
                     :document_type    => 'pdf',
                     :name             => self.title.tr(' ','_'),
                     :test             => true) do |file, response|

      file.extend(ActionDispatch::Http::UploadedFile)
      file.content_type  = response.headers["content-type"]
      name = self.title.strip.gsub(/\s/, "_").gsub(/\W/, "").underscore.downcase
      file.original_filename = "#{name}.pdf"

      if response.code == 200
        self.pdfdoc = file
      end
  end
end

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

в конце концов, я просто упаковал его. Я устанавливаю локальную переменную для имени файла, который я хочу сохранить (self.pdfdoc), а остальная часть обрабатывает paperclip. это сработало.

1 голос
/ 25 августа 2014

Нет ничего лучше, чем ответить на вопрос 3 года спустя ...

Для любого, кто столкнется с этим в будущем, это «правильный» способ сделать это:

DocRaptor.create(options) do |file, response|
   upload = ActionDispatch::Http::UploadedFile.new({
      :filename => 'test.pdf',
      :type => response.headers["content-type"],
      :tempfile => file
    })
end
...