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:
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.
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.
Was macht die store_versions!
Methode?
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 %
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
Ich habe keine Lösung für dieses Problem, aber es gibt keine Dokumentation darüber und wir sollten mit der Erstellung beginnen.
Tags und Links ruby-on-rails carrierwave