我有一个使用Devise生成的用户模型。我正在使用paperclip扩展此模型以启用文件上载以及使用自定义回形针处理器处理文件。
我的回形针字段在用户模型中声明如下。 PaperClipStorage是我用回形针变量创建的哈希。此外,存储在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
回调,它应该采用处理器make方法生成的section_layout
。代码如下
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个小时我一直在努力。任何帮助都会非常感激。
由于
保
答案 0 :(得分:2)
我的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])
注意复数风格而不是单数风格