该问题通常出现在使用 ActiveStorage
进行文件上传时,因为文件的 content_type
属性并没有被正确的处理而导致的。
解决该问题需要在模型中添加一个验证器来检查文件的 content_type
属性是否正确,并在出现错误时抛出异常。可以按照如下代码示例进行操作:
class MyModel < ActiveRecord::Base
has_one_attached :image
validate :correct_content_type
private
def correct_content_type
if image.attached? && !image.content_type.in?(%w(image/jpeg image/png))
errors.add(:image, "必须是JPEG或PNG格式的图片")
end
end
end
这个例子中,我们给 MyModel
添加了一个 image
的附件,并定义了 correct_content_type
方法用于检查附件的 content_type
属性是否正确。在检查到错误时,我们使用 errors.add
方法将错误信息添加到模型中,并在实例化对象时抛出异常。最后,在使用 ActiveStorage
进行文件上传时,就可以正确处理 content_type
属性,并避免出现 “no implicit conversion of String into Hash” 的异常。