Carrierwave gem. Wie können hochgeladene Bildversionen umbenannt werden, nachdem sie neu erstellt wurden?

10

Ich habe ähnliche Modelle wie in RailsCasts beschrieben:

app / models / resident.rb:

%Vor%

app / models / employee.rb:

%Vor%

app / models / Bedenken / photo_concern.rb:

%Vor%

app / uploaders / photo_uploader.rb:

%Vor%

app / views / employees / show.slim

%Vor%

Ich möchte Versionsdateien nach dem Zuschneiden umbenennen, damit meine Benutzer nicht mit einem Cache kämpfen müssen. Es ist in CarrierWave Wiki beschrieben, wie man Dateien umbenennt, aber auch es steht geschrieben " Um den neu erzeugten Dateinamen zu speichern, müssen Sie nach recover_versions das Modell save! aufrufen. ".

Wie kann ich Versionsdateien umbenennen? Ich kann save! nicht erneut in% after_save meines Mitarbeiters aufrufen, da es mehr Hooks gibt, die nicht zweimal aufgerufen werden sollten. Außerdem ist PhotoConcern in einer anderen Klasse enthalten.

Verwandte Wiki-Artikel:

Evmorov 06.01.2018, 11:58
quelle

1 Antwort

4
  

Um den neu erzeugten Dateinamen zu speichern, müssen Sie speichern aufrufen! auf dem Modell nach recreate_versions!.

Ich glaube also, dass die Antwort auf Ihre Zweifel in der Carrierwave-Rubdokumentation

  

recreate_versions!(*versions) ⇒ Object

     

Erstellen Sie Versionen neu und verarbeiten Sie sie erneut. Dies kann verwendet werden, um Versionen neu zu erstellen, wenn sich ihre Parameter irgendwie geändert haben.

Diese Methode speichert *versions , wenn sie nicht weggelassen werden, andernfalls wird cached file gespeichert.

%Vor%

Was macht store! ?

Dies ist die Seite rubydoc über store!

  

store!(new_file = nil) ⇒ Object

     

Speichert die Datei, indem sie sie an die Speicher-Engine dieses Uploaders übergibt.   Wenn new_file weggelassen wird, wird eine zuvor zwischengespeicherte Datei gespeichert

Diese Methode ist in Ihrem class PhotoUploader < CarrierWave::Uploader::Base enthalten und verwendet with_callbacks , um Ihre Datei mit dem Callback :store zu speichern. Der Callback löst diese Methode aus.

%Vor%

Was macht die store_versions! Methode?

%Vor%

Was sind die Carrierwave-Rückrufe und wie man sie benutzt?

%Vor%

Diese Frage zu SO erklärt und das Wiki erklären, wie Callbacks funktionieren, indem Sie after :store, :my_method ausführen. Innerhalb Ihres version :low do Blocks führen Sie my_method nur bei after :store Callback (nur für diese Version) aus.

Der :store Callback entspricht der Ausführung von store! .

Und was ist das Attribut @filename ? Wie codiert recreate_versions! den Dateinamen?

@filename wird mit der Methode filename in % co_de definiert %

%Vor%

Das Handbuch von carrierwave schlägt vor, lib/carrierwave/uploader/store.rb zu verwenden, um beim Erstellen von Versionen mit def filename eindeutige Dateinamen wiederherzustellen.

Diese Methode wird nicht in der Datenbank gespeichert. Um in der Datenbank zu speichern, müssen Sie recreate_version! in den entsprechenden Callbacks von save! aufrufen, ohne dass Sie Carrierwave GEM

brechen

Ich habe keine Lösung für dieses Problem, aber es gibt keine Dokumentation darüber und wir sollten mit der Erstellung beginnen.

    
Fabrizio Bertoglio 09.01.2018 09:39
quelle

Tags und Links