5

我有这个上传器类

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?

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

4

2 回答 2

4

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

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

我实际上没有尝试过,但它记录在代码中,所以它应该可以工作。

于 2012-08-02T13:46:17.277 回答
2

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

然而,做相反的条件(例如!icon_only?)需要一些工作。

process :resize_to_limit => [300, 300], :if => Proc.new {|version, options| !version.send(:icon_only?, options[:file])} do
于 2013-05-14T02:23:20.000 回答