从 rmagick 捕获错误时更改 CarrierWave 错误消息

Altering CarrierWave error message when catching error from rmagick

我正在使用 CarrierWave + rmagick gems 将图像上传到服务器。当我上传普通文件时,一切正常。但是当我上传格式错误的文件时,表单错误不显示 CarrierWave 错误,它显示 运行 rmagick.

时出现的错误

一个简单的例子。我有 User 模型,里面有一个上传器:

class User < ActiveRecord::Base
  ...
  mount_uploader :avatar, PictureUploader
end

avatar 是一个字符串field

现在,上传器定义在这里:

class BaseImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  storage :fog

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end


class PictureUploader < BaseImageUploader
  def default_url
    'placeholder.png'
  end

  def store_dir
    'images/pictures'
  end

  version :thumb do
    process resize_to_fit: [50, 50]
  end

  version :medium do
    process resize_to_fill: [400, 400]
  end

  version :small_square do
    process resize_to_fill: [200, 200]
  end
end

然后我创建了一个空文件,例如 touch ~/Desktop/file.jpg,并尝试通过表单上传它,这里我收到验证错误:

Avatar Failed to manipulate with rmagick, maybe it is not an image? Original Error: Empty input file `<foldername>/public/uploads/tmp/1470905765-10111-5893/thumb_file.jpg' @ error/jpeg.c/JPEGErrorHandler/322

我尝试使用 ming_magick 而不是 rmagick,但结果是一样的(错误消息略有不同)

我可以做些什么来更改此验证消息,使其显示类似 Avatar Your image is invalid 的内容而不是默认消息吗?

嗯,其实这很简单:我只需要向 i18n 添加一个字符串,就像这样:

errors.messaging.rmagick_processing_error: "Error processing image"