带有Carrierwave的条件版本/流程

时间:2012-08-02 13:28:39

标签: ruby-on-rails-3 carrierwave

我有这个上传者课程

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::RMagick

  process :resize_to_limit => [300, 300]

  version :thumb do
    process :resize_to_limit => [50, 50]
  end

 ...

将原始文件处理为300x300并保存缩略图版本。

我希望能够根据模型上的布尔值制作小/拇指版本吗?

所以我做了这个

if :icon_only?
 process :resize_to_limit => [50, 50]
else
  process :resize_to_limit => [300, 300]
end

protected

 def icon_only? picture
   model.icon_only?
 end

但它始终以50x50的处理结束。即使我这样做了

 def icon_only? picture
   false
 end

我可能会对我的语法错误:但我也尝试过询问

if icon_only?

哪位告诉我没有这样的方法名称。我迷失了......

2 个答案:

答案 0 :(得分:3)

使用:if条件,如下所示:

process :resize_to_limit => [50, 50], :if => :icon_only?
process :resize_to_limit => [300, 300], :if => ...

我实际上没有尝试过这个,但它已经记录in the code,所以它应该有效。

答案 1 :(得分:2)

正如@shioyama指出的那样,可以使用:if指定条件。

然而,执行逆条件(例如!icon_only?)需要一些工作。

process :resize_to_limit => [300, 300], :if => Proc.new {|version, options| !version.send(:icon_only?, options[:file])} do