如果用户尝试使用Paperclip上传相同的照片到Rails应用程序中,有没有办法引发验证错误? Paperclip似乎没有提供此功能...
我正在使用Rails 2.3.5和Paperclip(显然)。
解决方案:(至少之一)
采用Beerlington的建议,我决定使用MD5校验和比较:
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
然后我只需向我的
photos
表中添加一个名为md5_checksum
的列,就完成了!现在,如果您尝试上传相同的照片,我的应用程序会抛出一个验证错误!不知道这种方法的效率如何,所以欢迎重构!谢谢!