2012-08-02 42 views
5

過程中,我有這樣的上傳類條件版本/與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 

... 

這將原始文件處理到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丟失。 ..

回答

3

使用的:if有條件的,就像這樣:

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

我有沒有真正的三編輯這個,但它被記錄在in the code,所以它應該工作。

+0

我這部分工作 過程:resize_to_limit => [50,50],:如果=>:icon_only? process:resize_to_limit => [300,300],:if =>!:icon_only? 但它總是會創建拇指版本,甚至是除非聲明 version:thumb,:unless =>:icon_only? 版本:thumb do process:resize_to_limit => [50,50] end – Jepzen 2012-08-03 07:59:48

+2

我不認爲':if =>!:icon_only?'會工作。要麼定義另一個函數':not_icon_only?'或使用proc:'process:resize_to_limit => [300,300],:if => Proc.new {!icon_only? }'。你也確定你的'icon_only?'方法實際上工作嗎?它需要一個參數'picture',但是你可以在'model'上調用'icon_only?'。 – 2012-08-03 08:43:24

+0

好吧,它看起來像一團糟,所以我最終爲我的圖標製作了另一個上傳類。我的icon_only?方法(在模型上)也沒有采用新分配的值,它只是從表中默認值,所以即使我有邏輯工作,我不知道如何確定它應該只是一個圖標或不。感謝您的幫助。 – Jepzen 2012-08-03 09:36:48

2

正如@shioyama指出的那樣,可以使用:如果指定條件。

但是,做相反的條件(例如!icon_only?)需要一些工作。

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