處理

2014-06-24 22 views
2

版本時,如何跳過carrierwave店回調我有我的video uploader類的carrierwave
after :store, :my_method
定義的回調,我有文件的三個版本。 original,standard,low處理

my_method執行時,每個版本處理,即三次,我只需要回調執行一次。

+0

您是否找到了解決方案?我有個類似的問題 – Alain

回答

5

我知道這是一個非常晚的反應,但我最近剛剛遇到同樣的問題,所以我決定發佈我如何解決這個「問題」,因爲它似乎沒有記載在carrierwave的github頁面上(或者我不是'無論如何都能找到它)。

好吧,關於after :store, :my_method回調,如果你把它放在你的上傳類的「主體」中,那麼它將在每次存儲文件時執行,所以在你的情況下,我認爲它不僅執行爲您的3個版本,但也爲您的原始文件。

比方說,下面的代碼定義你的carrierwave上傳:

class PhotoUploader < CarrierWave::Uploader::Base 
    after :store, :my_method 

    version :original do 
    process :resize_to_limit => [1280,960] 
    end 

    version :standard, from_version: :original do 
    process :resize_to_limit => [640,480] 
    end 

    version :low, from_version: :standard do 
    process :resize_to_limit => [320,240] 
    end 

    protected 
    def my_method 
     puts self.version_name 
    end 
end 

這樣一來,after :store會存儲每個文件執行,但如果你只希望它被執行,比方說,對於:low版本,您只需在版本定義中移動該行即可。就像這樣:

class PhotoUploader < CarrierWave::Uploader::Base 

    version :original do 
    process :resize_to_limit => [1280,960] 
    end 

    version :standard, from_version: :original do 
    process :resize_to_limit => [640,480] 
    end 

    version :low, from_version: :standard do 
    process :resize_to_limit => [320,240] 
    after :store, :my_method 
    end 

    protected 
    def my_method 
     puts self.version_name 
    end 
end 

我測試我的代碼和它的作品......我知道這是一個很長的時間,因爲你張貼了這個問題,也許你得出了相同的解決方案我。所以我決定回答它,以供將來參考,以供任何人獲得相同的問題。