我想建立一個特定的上傳器,以便當相關的模型對象被銷燬時,亞馬遜S3上的文件不會被刪除。我想停止載波刪除文件
原因是我的上傳模型記錄雖然被銷燬,但仍在第二個審計表中引用。
我正在使用fog,carrierwave和s3。
我想建立一個特定的上傳器,以便當相關的模型對象被銷燬時,亞馬遜S3上的文件不會被刪除。我想停止載波刪除文件
原因是我的上傳模型記錄雖然被銷燬,但仍在第二個審計表中引用。
我正在使用fog,carrierwave和s3。
那麼據我所知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
這將確保該文件前清潔當記錄從數據庫中刪除時
讓我知道是否有更好的辦法
希望這有助於
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
其實是有辦法做到這一點,你只需要跳過回調刪除它:
skip_callback :commit, :after, :remove_<column_name>!
例如
# user.rb
mount_uploader :avatar
skip_callback :commit, :after, :remove_avatar!
看到https://github.com/carrierwaveuploader/carrierwave#skipping-activerecord-callbacks
它的工作原理!謝謝 – joselo
謝謝Dave,不幸的是,我已經有了這個,而且它沒有工作。有關爲什麼它可能會失敗的任何想法,我在上傳。 – nodrog
@DaveNewton我不認爲它會起作用只有在更新的情況下,不刪除記錄 – Viren