2013-06-25 93 views
9

我想建立一個特定的上傳器,以便當相關的模型對象被銷燬時,亞馬遜S3上的文件不會被刪除。我想停止載波刪除文件

原因是我的上傳模型記錄雖然被銷燬,但仍在第二個審計表中引用。

我正在使用fog,carrierwave和s3。

回答

9

那麼據我所知remove_previously_stored_files_after_update當一個模型對象是隻工作updated所以將它設置爲false不會刪除舊file期間update

但是,在你的情況,你必須確保該文件仍然存在,當相關的模型對象是摧毀

好,我不認爲有(如果檢查代碼here)是任何機制目前可在Carrierwave

但是你可以重寫的remove!來達到同樣的我想這包括建立attr_accessor(這是一個標記,決定是否保留該文件或刪除)

裏面你想要的型號定義attr_accessor(比如keep_file)

並在所需的上傳器中覆蓋remove!方法

class MyUploader < CarrierWave::Uploader::Base 
    def remove! 
    unless model.keep_file 
     super 
    end 
    end 
end 

,並確保您設置的attr_accessor爲對象(如果你想保留刪除的文件)毀壞他們

u = User.find(10) 
u.keep_file = true 
u.destroy 

這將確保該文件前清潔當記錄從數據庫中刪除時

讓我知道是否有更好的辦法

希望這有助於

7

Keeping files for all, or some uploaders

CarrierWave.configure do |config| 
    config.remove_previously_stored_files_after_update = false 
end 

如果你想配置每個上傳的基礎上:

class AvatarUploader < CarrierWave::Uploader::Base 
    configure do |config| 
    config.remove_previously_stored_files_after_update = false 
    end 

    ... 
end 
+0

謝謝Dave,不幸的是,我已經有了這個,而且它沒有工作。有關爲什麼它可能會失敗的任何想法,我在上傳。 – nodrog

+0

@DaveNewton我不認爲它會起作用只有在更新的情況下,不刪除記錄 – Viren