我将回形针设置为My" Document"模型,具有相当标准的配置。它工作得很好,但我想在后台作业中使用Rest来分隔附加样式文件生成。
(我想停止创建:原始样式以手动分配文件,但它似乎不可能)
因此,要在后台作业中提取样式,我首先要停止回形针样式处理器。 然后我称之为再处理!在after_save回调中生成它们。
这样做会将更新操作置于无限循环中,而且正是在我调用重新处理时!
这是我的文档模型(为了理解目的而简化)
class Document < ActiveRecord::Base
has_attached_file :attachment
before_post_process :stop_process
after_save :process_styles #same result with after_update (since user can only add attachment when updating profile)
# Kill all paperclip styles
#still generate the :orginal style. Block that too to copy it manually from remote folder would be nice
def stop_process
false
end
#call for the generation of the additional styles (:medium, :thumb)
def process_styles
Profile.processDocumentJob(id)
end
#will be a background job
def self.processDocumentJob(id)
document = Document.find(id)
document.attachment.reprocess!
document.save(validate: false)
end
end
尽管我的document.save(validate:false),更新过程中的进程循环。 我尝试了after_update回调,调整了我的代码和条件,没有成功。 提前感谢您的宝贵帮助
答案 0 :(得分:0)
我知道这是一个古老的问题,但今天发生在我身上并以这种方式解决了......有点hackh btw ......我并不为我的解决方案感到骄傲。这适用于Rails 5。
以下是我的模型的简化版本:
class Organization < ApplicationRecord
attr_accessor :skip_callbacks
has_attached_file :logo, styles: { header: "380x160>" }
validates_attachment :logo, content_type: {content_type: ['image/png','image/jpg','image/gif']}
after_save :reprocess_logo, unless: :should_skip_callbacks?
def should_skip_callbacks?
self.skip_callbacks
end
def reprocess_logo
self.skip_callbacks = true
self.logo.reprocess!
end
end