Rails 4: valida se uma imagem para upload é única

Se você deseja verificar se já carregou a mesma imagem antes, esta é uma maneira fácil de fazer isso:

  1. Crie uma migração para armazenar o SHA-1 da imagem:

rails g migration add_image_sha1_to_my_model image_sha1:string

  1. Calcule SHA-1 no modelo:
before_validation(on: :create) do
self.sha1 = Digest::SHA1.file(image.path).hexdigest
end
  1. Crie um validador personalizado para a imagem (pode ser usado para outras imagens):
class ImageValidator < ActiveModel::Validator
def validate(image)
image
.errors.add(:image, 'already exists') if image.class.exists?(sha1: image.sha1)
end
end
  1. Adicione a validação ao modelo:
class MyModel < ActiveRecord::Base
validates_with
ImageValidator
end