2017-03-08 1 views

Antwort

0

Hier ist eine Lösung, die Sie zwicken und ändern können, um Ihre Bedürfnisse zu erfüllen! Es ergibt sich das ursprüngliche Elternbild mit seiner eigenen Crop-Version sowie ein völlig separates Basisbild dessen, was abgeschnitten wurde. Die Eltern-Image-Crop-Version, die typischerweise in Carrierwave verwendet und referenziert wird, dient als Platzhalter, um ein neues Basis-Image zu generieren. In der Praxis wird es sich also ständig mit jeder Ernte ändern.

Wenn ein Uploader auf die Modellklasse montiert ist (wie hier), muss die Arbeit über den zugehörigen Controller erfolgen, nicht in der Uploader- oder Modellklasse. Dies ist sehr wichtig.

Da das Ziel darin bestand, eine vorhandene Image-Version selektiv herauszuziehen und hochzuladen, und da das Zuschneiden selbst als Teil der Aktualisierungsaktion des Controllers erfolgt, wurden die Code-Ergänzungen dort vorgenommen. Eines der wichtigsten Dinge zu verstehen war, wie sich die Datei-Crop-Datei selbst befindet: @image.image.versions[:crop]. Mit diesem Wissen geht es dann nur darum, es als Parameter durchzusetzen.

images_controller.rb 
... 
def update 
    respond_to do |format| 
    if @image.update(image_params) 
     format.html { redirect_to @image, notice: 'Image was successfully updated.'} 
     format.json { render :show, status: :ok, location: @image } 

     #### HERE IS THE SOLUTION ### 
     @crop_image = current_user.images.build(image: @image.image.versions[:crop]) 
     if @crop_image.save 
     format.html { redirect_to @crop_image, notice: 'Crop image successfully created.'} 
     format.json { render :show, status: :created, location: @crop_image } 
     else 
     format.html { render :new, notice: 'Crop image could not be saved for some reason...'} 
    end 
    else 
    format.html { render :edit } 
    format.json { render json: @image.errors, status: :unprocessable_entity } 
    end 
end 

Ende

Verwandte Themen