Есть ли возможность выдать ошибку проверки, если пользователь пытается дважды загрузить одну и ту же фотографию в приложение 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
, и вуаля! Теперь мое приложение выдает ошибку проверки, если вы пытаетесь загрузить ту же фотографию!
Понятия не имею, насколько это эффективно / неэффективно, поэтому рефакторинг приветствуется!
Спасибо!