У меня есть пользовательская модель, созданная с помощью 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 часа. Любая помощь будет очень признателен.
Спасибо
Пол