我有一个带有paperclip红宝石宝石的模型。我使用2个处理器(thumbnail
和watermark
)定义了一个附件。
问题是,如果条件为true
,是否存在应用水印处理器的方式。 (这个想法没有定义没有水印处理器的新attach_files)
提前致谢。
我尝试使用此代码,但不起作用。如果字段eid存在带水印的进程,否则如果null进程只有缩略图
:processors => lambda { |a|
if a.eid.nil?
[:thumbnail,:watermark]
else
[:thumbnail]
end
},
答案 0 :(得分:6)
processors
选项可以接受proc,因此您可以让您的处理器依赖于实例:
:processors => lambda{ |attachment|
attachment.instance.some_method_to_get_processors_here
},
答案 1 :(得分:4)
根据目前的Paperclip文档,对于处理器而言,lambda的调用方式与样式不同。样式通过附件:
class User < ActiveRecord::Base
has_attached_file :avatar, :styles => lambda { |attachment| { :thumb =>
(attachment.instance.boss? ? "300x300>" : "100x100>") } }
end
attachment.instance
是您模型的实例。但处理器本身就传递了实例:
class User < ActiveRecord::Base
has_attached_file :avatar, :processors => lambda { |instance| instance.processors }
attr_accessor :watermark
end
后一个例子对我有用。我有User#processors
返回一个处理器数组(但如果你只想要默认处理器,则返回[:thumbnail]
,而不是空数组。)