Rails: Предотвращение дублирования загрузки фотографий с помощью скрепки?
Есть ли способ выдать ошибку проверки, если пользователь пытается дважды загрузить одну и ту же фотографию в приложение Rails с помощью Paperclip? Скрепка, кажется, не предлагает эту функциональность ...
Я использую Rails 2.3.5 иСкрепка для бумаг (Очевидно).
РЕШЕНИЕ: (или один из них, по крайней мере)
Используя предложение Берлингтона, я решил пойти с сравнением контрольной суммы 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
и вуаля! Теперь мое приложение выдает ошибку проверки, если вы пытаетесь загрузить ту же фотографию!
Не знаю, насколько это эффективно / неэффективно, так что рефакторинг приветствуется!
Спасибо!