Rails - Скрепка, проверяющая размер вложения, когда этого не должно быть?

У меня есть модель рельсов, использующая Paperclip, которая выглядит так:

  has_attached_file :image, :styles => { :normal => ['857x392#', :png] },
                    :url => '/assets/pages/:id/:basename.:extension',
                    :path => ':rails_root/public/assets/pages/:id/:basename.:extension'

  validates_attachment_size :image, :less_than => 2.megabytes

При попытке создать запись этой модели без вложения для загрузки возвращается ошибка проверки:

Были проблемы со следующими поля:

* Image file size file size must be between 0 and 2097152 bytes.

Я пробовал передать оба: allow_blank = > true и: allow_nil = > true после утверждения валидации в модели, но они не работали.

Как разрешить параметр: image быть пустым?

Ответ 1

validates_attachment_size: image,: in = > 0.megabytes..2.megabytes

работает сейчас

Ответ 2

validates_attachment_size :image, :less_than => 25.megabytes, 
                          :unless => Proc.new {|m| m[:image].nil?}

отлично работает для меня

Ответ 3

Проверка скрепки только проверяет диапазон и не заботится о :allow_nil => true

Что вы можете сделать, это попытаться установить :min => nil или :min => -1, возможно, это сработает.

Update: Это не будет работать в последней версии Paperclip, поскольку они изменили работу валидации. Вместо этого вы можете попробовать:

validates_attachment_size :image, :less_than => 2.megabytes, 
   :unless => Proc.new {|model| model.image }

Ответ 4

Попробуйте использовать следующий код.

validate :image_present

def image_present
  if image.present? && image_file_size < 2.megabytes
    errors.add(:file_size, "file size must be between 0 and 2 megabytes.")
  end
end