如果条件为真,请使用回形针处理器

时间:2011-12-21 13:49:32

标签: ruby-on-rails paperclip

我有一个带有paperclip红宝石宝石的模型。我使用2个处理器(thumbnailwatermark)定义了一个附件。

问题是,如果条件为true,是否存在应用水印处理器的方式。 (这个想法没有定义没有水印处理器的新attach_files)

提前致谢。

我尝试使用此代码,但不起作用。如果字段eid存在带水印的进程,否则如果null进程只有缩略图

:processors => lambda { |a|
                if a.eid.nil?
                        [:thumbnail,:watermark]
                else
                        [:thumbnail]
                end
                },

2 个答案:

答案 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],而不是空数组。)