【问题标题】:Carrierwave displays image after failed validation验证失败后,Carrierwave 显示图像
【发布时间】:2016-07-14 22:35:38
【问题描述】:

使用 Carrierwave 上传图片,并在验证失败时将图片呈现在页面上。

场景:

访问包含用户头像图像的用户编辑页面。 上传大于 4 MB 的新头像并点击更新。 验证器失败,因为文件大小大于 4 MB。 用户编辑页面呈现正确的错误消息。

问题:

图像显示在渲染的编辑页面上。如果我重新访问用户编辑页面,它就会消失,并且可以确认它没有保存在数据库中。

我也在使用 '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

参考: https://github.com/johnTheDudeMan/foodme

【问题讨论】:

标签: validation ruby-on-rails-4 carrierwave


【解决方案1】:

在我的#update 中加入以下行似乎可以解决问题。现在我只需要弄清楚如何清除缓存,因为carrierwave 仍然保留那些失败的上传。

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

【讨论】:

  • gem 的 wiki 中有一个“如何:清除缓存目录”。你试过了吗?
  • 是的,我试过了,但我无法让它工作。我一开始试图从更新功能中删除 tmp 目录,然后甚至手动删除,但所有文件和目录仍然存在。
  • 现在 MiniMagick 也会处理图像的大小调整,因此允许无效图像通过,因为它会调整大小并使其低于最大文件大小。我需要禁用此功能,然后通过清除缓存重试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 2017-09-21
  • 1970-01-01
  • 2012-10-30
相关资源
最近更新 更多