带有Carrierwave的条件版本/流程

Jep*_*zen 5 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

 ...
Run Code Online (Sandbox Code Playgroud)

将原始文件处理为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
Run Code Online (Sandbox Code Playgroud)

但它总是以50x50的处理结束.即使我这样做了

 def icon_only? picture
   false
 end
Run Code Online (Sandbox Code Playgroud)

我可能会把我的语法弄错:但我也试过问

if icon_only?
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*erg 4

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

process :resize_to_limit => [50, 50], :if => :icon_only?
process :resize_to_limit => [300, 300], :if => ...
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为 `:if =&gt; !:icon_only?` 不起作用。定义另一个函数 `:not_icon_only?` 或使用 proc: `process :resize_to_limit =&gt; [300, 300], :if =&gt; Proc.new { !icon_only? }`。另外您确定您的“icon_only?”方法确实有效吗?它需要一个参数“picture”,但然后你在“model”上调用“icon_only?”。 (2认同)