验证文件大小和上载的图像数量

时间:2014-09-24 08:36:00

标签: ruby validation activerecord ruby-on-rails-4

我正在尝试验证使用carrierwave上传的图片的大小以及用户上传的图片数量(最好验证每个图片文件的大小)。

我正在以下列方式使用nested_attributes

class Animal < ActiveRecord::Base
  has_many :animal_images, dependent: :destroy
  accepts_nested_attributes_for :animal_images, allow_destroy: :true, reject_if: proc { |attributes| attributes['image'].size > 2.megabytes }, limit: 3
end

所以目前如果图像超过2MB,如果静默失败,如果用户尝试上传超过3个图像,那么我会得到一个NestedAttributes :: TooManyRecords异常,从用户的角度来看这看起来不太好。 / p>

我想要做的是在我当前的自定义验证方法中包含这些验证,以便我可以将错误添加到[:base]

def dog_form_validation
  if name.blank?
    errors[:base] << "Please provide your Dog's name"
  end
  if age.blank?
    errors[:base] << "Please provide your Dog's age"
  end
 // More validations here
end

我如何访问animal_image数组,1)检查它是否首先存在,然后2)检查它的大小....或者我正在考虑这个错误的方式

if animal_image[0].size > 2.megabytes
 errors[:base] << 'Please ensure file size is less than 2MB"
end

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

您可能必须使用

memsize_of(animale_image[0]) > 2.megabytes

number_to_human_size(File.size("#{animal_image[0]}"))

使用number_to_human_size为您的班级添加include ActionView::Helpers::NumberHelper