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

时间:2016-04-02 13:00:26

标签: 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: true

end

我在picture_uploader.rb

中使用此白名单
  def extension_white_list
    %w(jpg jpeg png)
  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'} %>

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

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题并最终做到了这一点:

1)确保在验证之前放置@

2)

mount_uploader :attachment, AttachmentUploader

我认为如果存在其他错误(很可能是validates :attachment, presence: true, unless: :attachment_errors_exist? def attachment_errors_exist? errors[:attachment].present? end ),那么附件必须已经存在,对吧?我想你可以进一步检查消息本身以确定它是否是extension_white_list_error,但这对我来说已经足够了。