Rails: Doppelte Foto-Uploads mit einer Büroklammer verhindern?
Gibt es trotzdem einen Validierungsfehler, wenn ein Benutzer versucht, dasselbe Foto mit Paperclip zweimal in eine Rails-App hochzuladen? Paperclip scheint diese Funktionalität nicht zu bieten ...
Ich benutze Rails 2.3.5 undBüroklammer (offensichtlich).
LÖSUNG: (oder zumindest einer von ihnen)
Aufgrund des Vorschlags von Beerlington habe ich mich für einen MD5-Prüfsummenvergleich entschieden:
class Photo < ActiveRecord::Base
#...
has_attached_file :image #, ...
before_validation_on_create :generate_md5_checksum
validate :unique_photo
#...
def generate_md5_checksum
self.md5_checksum = Digest::MD5.hexdigest(image.to_file.read)
end
def unique_photo
photo_digest = self.md5_checksum
errors.add_to_base "You have already uploaded that file!" unless User.find(self.user_id).photos.find_by_md5_checksum(photo_digest).nil?
end
# ...
end
Dann habe ich einfach eine Spalte zu meiner hinzugefügtphotos
Tisch genanntmd5_checksum
und voila! Jetzt gibt meine App einen Validierungsfehler aus, wenn Sie versuchen, dasselbe Foto hochzuladen!
Keine Ahnung, wie effizient / ineffizient das ist, also Refactoring ist willkommen!
Vielen Dank!