2016-07-14 59 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处理图像的大小调整,从而允许通过无效图像,因为它调整大小并将其带到最大文件大小以下。我需要禁用此功能,然后重试清除缓存。 –