有条件的版本/工艺与Carrierwave(Conditional versions/process

2019-07-30 18:31发布

我有这样的上传类

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::RMagick

  process :resize_to_limit => [300, 300]

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

 ...

这将原始文件处理到300×300,并保存拇指版本。

我想能够使仅基于我的模型一个布尔小/拇指版本?

所以我做了这个

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?

这告诉我,有没有方法名状that.Im输了...

Answer 1:

使用:if有条件的,就像这样:

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

我还没有真正尝试过这一点,但它的记录中的代码 ,所以它应该工作。



Answer 2:

作为@shioyama指出,可以使用:如果指定的条件。

但是,这样做逆条件(如!icon_only?需要一点点的工作。

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


文章来源: Conditional versions/process with Carrierwave