Ich habe eine Methode namens before_save, die ein hochgeladenes Bild umbenennt.Rails: Wie führe ich ein before_save nur aus, wenn bestimmte Bedingungen erfüllt sind?
before_save :randomize_file_name
def randomize_file_name
extension = File.extname(screen_file_name).downcase
key = ActiveSupport::SecureRandom.hex(8)
self.screen.instance_write(:file_name, "#{key}#{extension}")
end
Diese Methode ist Teil meines Modells Item
.
Das funktioniert gut, wenn ich ein neues Element erstellen oder das mit einem Element verknüpfte Bild aktualisieren muss ... aber das Problem ist, dass, wenn ich ein Element aber nicht das Bild aktualisieren muss, die randomize_file_name
Methode noch ausgeführt wird Benennt die Datei in der Datenbank um (natürlich nicht die Datei selbst).
Also, ich denke, ich muss einen Weg finden, nur randomize_file_name
ausführen, wenn eine Datei in das Formular Einreichung enthalten ist ... aber ich bin mir nicht sicher, wie man das abziehen.
Ausführlichere Dokumentation hier: http://apidock.com/rails/ActiveRecord/Dirty –
Dies wird es auch nicht bekommen. Was passiert, wenn der Benutzer eine neue Datei mit demselben Dateinamen hochlädt? In diesem Fall ist Dateiname gleich, aber Sie möchten möglicherweise einen anderen Schlüssel. –