2016-07-14 60 views
0

使用Carrierwave上傳圖像並在驗證失敗時呈現圖像。Carrierwave在驗證失敗後顯示圖像

場景:

訪問用戶編輯頁面,它包含了用戶的頭像圖片。 上傳一個大於4 MB的新頭像圖片並點擊更新。 驗證器因文件大小大於4 MB而失敗。 用戶編輯頁面顯示正確的錯誤消息。

問題:

圖像顯示在呈現編輯頁面。如果我重新訪問用戶編輯頁面,它會消失,並且可以確認它沒有保存在數據庫中。

我也在使用'file_validator'寶石。

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 

編號:https://github.com/johnTheDudeMan/foodme

+0

我試過了CarrierWave wiki的指令來刪除緩存目錄,但是驗證失敗後它們不會被刪除。 https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Delete-cache-garbage-directories –

回答

0

把我#UPDATE以下行似乎來解決這個問題。現在我只需要弄清楚如何清除緩存,因爲carrierwave仍然保留這些失敗的上傳。

@user.avatar = @user.avatar.retrieve_from_store!(@user.avatar.identifier) 
+0

在gem的wiki中有一個'如何清除緩存目錄'。你嘗試過嗎? – Mauddev

+0

是的,我嘗試過,但我無法使它工作。我試圖首先從更新函數中刪除tmp目錄,然後甚至手動刪除,但所有文件和目錄仍然存在。 –

+0

現在MiniMagick處理圖像的大小調整,從而允許通過無效圖像,因爲它調整大小並將其帶到最大文件大小以下。我需要禁用此功能,然後重試清除緩存。 –