Ruby on rails Carrierwave-如果文件类型不在白名单上,则触发状态验证

Ruby on rails Carrierwave-如果文件类型不在白名单上,则触发状态验证,ruby-on-rails,carrierwave,Ruby On Rails,Carrierwave,在我的rails 4应用程序中,我使用carrierwave上传图像 class UserItemImage < ActiveRecord::Base include PicturesHelper attr_accessor :foo mount_uploader :picture, PictureUploader belongs_to :user_item validate :picture_size validates :picture, presence

在我的rails 4应用程序中,我使用carrierwave上传图像

class UserItemImage < ActiveRecord::Base

  include PicturesHelper

  attr_accessor :foo

  mount_uploader :picture, PictureUploader
  belongs_to :user_item
  validate :picture_size
  validates :picture, presence: true

end
我的表格

  <%= simple_form_for :user_item_image, url: user_item_user_item_images_path(@user_item), multipart: true do |f| %>
    <%= f.input :picture, as: :file, label: false, input_html: {multiple: true, class: 'image-file'} %>


当我尝试附加扩展名不在白名单上的文件时。我收到一条“不能为空”的错误消息。如果删除状态验证,则白名单验证错误将正确显示。我真的希望显示文件扩展名错误消息,因为从技术上讲,它不是空的,只是有一个不正确的文件

我也有同样的问题,最后我做了这样的事情:

1) 请确保在验证之前放置
mount\u uploader:attachment,AttachmentUploader

(二)


我想如果存在其他错误(很可能是
扩展名\u白色\u列表\u错误
),那么附件必须已经存在,对吗?我想您可以进一步检查消息本身,以确定它是否为
扩展\u白名单\u错误
,但这对我来说已经足够了。

您最终解决了这个问题吗?我也有同样的问题@gnclmorais我想我只是用它来处理文件输入
  <%= simple_form_for :user_item_image, url: user_item_user_item_images_path(@user_item), multipart: true do |f| %>
    <%= f.input :picture, as: :file, label: false, input_html: {multiple: true, class: 'image-file'} %>
validates :attachment, presence: true, unless: :attachment_errors_exist?

def attachment_errors_exist?
  errors[:attachment].present?
end