【问题标题】:Carrierwave - Presence validation triggering if filetype not on whitelistCarrierwave - 如果文件类型不在白名单上,则触发存在验证
【发布时间】:2017-03-27 21:50:16
【问题描述】:

在我的 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'} %>

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

【问题讨论】:

  • 你最终解决了这个问题吗?我也遇到了同样的问题!
  • @gnclmorais 我想我只是最终使用它来处理文件输入plugins.krajee.com/file-input

标签: ruby-on-rails carrierwave


【解决方案1】:

我遇到了同样的问题,最终这样做了:

1) 确保将mount_uploader :attachment, AttachmentUploader 放在验证之前。

2)

validates :attachment, presence: true, unless: :attachment_errors_exist?

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

我想如果存在其他错误(很可能是extension_white_list_error),那么附件必须已经存在,对吧?我想你可以进一步检查消息本身以确定它是否是extension_white_list_error,但这对我来说已经足够了。

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 2020-08-11
    • 1970-01-01
    • 2020-08-03
    • 2020-02-17
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多