2013-06-25 9 views
9

Chciałbym skonfigurować konkretnego uploadera, aby po zniszczeniu powiązanego obiektu modelu plik na Amazon3 nie został usunięty.Chciałbym zatrzymać plik zapisujący nośną usuwając plik

Powodem tego jest to, że mój rekord modelu przesyłania mimo zniszczenia nadal jest przywoływany w ramach drugiej tabeli kontroli.

Używam mgły, carrierwave i s3.

Odpowiedz

9

Dobrze AFAIK remove_previously_stored_files_after_update działa tylko wtedy, gdy obiekt model jest updated więc ustawienie go na false nie będzie usuń starego file podczas update Ale w twoim przypadku trzeba zapewnić plik są nadal obecne, gdy powiązany model obiektowy jest zniszczyć

dobrze nie sądzę tam (jeśli zbadać kod here) jest dowolny mechanizm obecnie dostępny w w Carrierwave zrobić

ale można nadpisać ten remove! aby osiągnąć to samo myślę, że to obejmować utworzenie attr_accessor (co jest flaga zdecydować, czy zachować plik lub usunąć)

Wewnątrz żądany model zdefiniować attr_accessor (słownie keep_file)

iw żądanym przesyłającym zastąpić usunięcie! Metoda

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

i upewnić się, że ustawienie attr_accessor dla obiektu (jeśli chcesz zachować usuniętego pliku) przed niszcząc je

Przykład

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

Zapewni to, że plik jest czyszczony w górę, gdy rekord zostanie usunięty z bazy danych

Daj mi znać, jeśli jest coś lepszego do zrobienia

Nadzieja ta pomoc

7

Keeping files for all, or some uploaders

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

Jeśli chcesz skonfigurować, że na podstawie za przesłane:

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

    ... 
end 
+0

Dzięki Dave, Niestety, już to miałem i nie działa. Wszelkie przemyślenia na temat tego, dlaczego może się to nie udać, mam je w przesyłającym. – nodrog

+0

@DaveNewton Nie sądzę, że to zadziała Działa tylko w przypadku aktualizacji, nie usuwając rekordu – Viren