2016-07-14 11 views
0

Mit Carrierwave wird ein Bild hochgeladen, und das Bild wird auf einer Seite gerendert, wenn die Validierung fehlgeschlagen ist.Carrierwave zeigt Bild nach fehlgeschlagener Validierung an

Szenario:

besuchen Benutzer bearbeiten Seite, wo es den Avatar-Bild des Benutzers enthält. Lade ein neues Avatarbild mit mehr als 4 MB hoch und klicke auf update. Validator schlägt fehl, da die Dateigröße größer als 4 MB ist. Benutzer bearbeiten Seite rendert mit korrekten Fehlermeldungen.

Problem:

Das Bild ist auf der gerenderten Seite bearbeiten angezeigt. Es verschwindet, wenn ich die Benutzerbearbeitungsseite erneut besuche, und kann bestätigen, dass es nicht in der Datenbank gespeichert wurde.

Ich verwende auch "file_validator" gem.

class User < ActiveRecord::Base 
    ... 
validates :avatar, file_size: { less_than: 4.megabytes } 
    ... 
end 


class UsersController < ApplicationController 
... 
def update 
    if @user.update_attributes(user_params) 
    flash[:success] = "Your account settings were successfully updated." 
    redirect_to @user 
    else 
    render 'edit' 
    end 
end 

Ref:https://github.com/johnTheDudeMan/foodme

+0

Ich habe die Anweisungen aus dem CarrierWave-Wiki versucht, Cache-Verzeichnisse zu löschen, aber sie löschen nicht nach fehlgeschlagener Validierung. https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Delete-cache-garbage-directories –

Antwort

0

die folgende Zeile in meinem #update Putting schien das Problem zu beheben. Jetzt muss ich nur herausfinden, wie man den Cache löscht, da carrierwave diese fehlgeschlagenen Uploads weiterhin speichert.

+0

Es gibt ein 'How to: löschen Cache-Verzeichnisse' im Gem-Wiki. Hast du das versucht? – Mauddev

+0

Ja, das habe ich versucht, aber ich konnte es nicht zum Laufen bringen. Ich habe versucht, das Tmp dir von der Update-Funktion zuerst zu löschen, und dann sogar manuell, aber alle Dateien und Verzeichnisse sind immer noch da. –

+0

Auch jetzt verarbeitet MiniMagick die Größenänderung eines Bildes und erlaubt somit ungültiges Bild durch, weil es die Größe ändert und es unter die Dateigröße max bringt. Ich muss dies deaktivieren und erneut versuchen, den Cache zu leeren. –