क्या कोई उपयोगकर्ता सत्यापन सत्यापन फेंकने के लिए वैसे भी है यदि कोई उपयोगकर्ता पेपरक्लिप का उपयोग करके रेल ऐप में दो बार एक ही फोटो अपलोड करने का प्रयास करता है? पेपरक्लिप इस कार्यक्षमता की पेशकश नहीं कर रहा है ...रेल: पेपरक्लिप के साथ डुप्लिकेट फोटो अपलोड को रोकना?
मैं रेल 2.3.5 और Paperclip (स्पष्ट रूप से) का उपयोग कर रहा हूं।
समाधान:
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
तो मैं बस के लिए एक स्तंभ कहा: (या उनमें से एक, कम से कम)
Beerlington के सुझाव का उपयोग करना, मैं एक MD5 चेकसम तुलना के साथ जाने का फैसला किया मेरी photos
तालिका md5_checksum
, और वॉयला कहा जाता है! यदि आप एक ही फोटो अपलोड करने का प्रयास करते हैं तो अब मेरा ऐप एक सत्यापन त्रुटि फेंकता है!
कोई विचार नहीं कि यह कितना कुशल/अक्षम है, इसलिए रीफैक्टरिंग का स्वागत है!
धन्यवाद!
यदि आप छवि तुलना एल्गोरिदम के लिए ऑनलाइन देखते हैं तो आपको कुछ डीएलएल फाइलें मिलेंगी (बोलाइड सॉफ़्टवेयर द्वारा जारी) जो बता सकती है कि दो छवियां समान हैं लेकिन यह रेल ऐप के अंदर अधिक उपयोग नहीं होगी। आप संभवतः अपना स्वयं का अलोग्राम लिख सकते हैं और लिख सकते हैं हालांकि मुझे नहीं पता कि यह समस्या के लायक होगा या नहीं। – stephenmurdoch