Пользовательский процессор Paperclip не вызывается - PullRequest
3 голосов
/ 01 февраля 2012

У меня есть пользовательская модель, созданная с помощью Devise. Я расширяю эту модель с помощью скрепки, чтобы разрешить загрузку файлов, а также обработку файла с помощью специального процессора для скрепок.

Поле моей скрепки объявлено в пользовательской модели следующим образом. PaperClipStorage - это хеш, который я создаю с помощью переменных paperclip. Также хранится на AWS S3.

has_attached_file :rb_resume, PaperclipStorageHash.merge(:style => { :contents => 'resume_contents'}, :processors => [:resume_builder])
validates_attachment_content_type :rb_resume, :if => lambda { |x| x.rb_resume? }, :content_type => ['application/pdf', 'application/x-pdf', 'application/msword', 'application/x-doc']

Проверка validates_attachment_content_type выполняется для проверки того, что он обрабатывает только файлы PDF и MS Word.

Мой процессор выглядит следующим образом

module Paperclip
  class ResumeBuilder < Processor
    def initialize(file,options = {}, attachment = nil)
      @file = file
      @attachment = attachment
      puts "Attachment is not null " if !attachment.nil?
    end

    def make
      rb = MyModule::MyClass.new(@file.path) ### Do something with the file
      section_layout  = rb.parse_html
      @attachment.instance_write(:whiny, section_layout)
      @file
    end
  end
end

В моей пользовательской модели у меня также есть обратный вызов after_save, который должен принимать section_layout, сгенерированный в методе make процессоров. Код выглядит следующим образом

after_save :save_sections
def save_sections
   section_layout = rb_resume.instance_read(:whiny)
   # Do something with section_layout...
end

Теперь моя проблема в том, что код процессора никогда не вызывается, и я не могу понять, почему.

Из-за этого переменная section_layout всегда равна nil.

Еще один момент, на который следует обратить внимание: та же модель имеет два других атрибута has_attached_file Ни один из двух других не использует пользовательский процессор.

Я боролся с этим последние 3 часа. Любая помощь будет очень признателен.

Спасибо

Пол

1 Ответ

2 голосов
/ 04 февраля 2012

Ошибка в моем объявлении has_attached_file

has_attached_file :rb_resume, PaperclipStorageHash.merge(:style => { :contents => 'resume_contents'}, :processors => [:resume_builder])

на самом деле должно быть

has_attached_file :rb_resume, PaperclipStorageHash.merge(:styles => { :contents => 'resume_contents'}, :processors => [:resume_builder])

Обратите внимание на множественные стили в отличие от единственного стиля

...