validates_uniqueness_of :name, :case_sensitive => falseকৌতুকটি করে তবে আপনার মনে রাখা উচিত যে আপনার যদি একাধিক সার্ভার / সার্ভার প্রক্রিয়া থাকে (যেমন ফিউশন প্যাসেঞ্জার চালাচ্ছেন, একাধিক মংগ্রেল ইত্যাদি) বা একটি বহু-থ্রেডযুক্ত সার্ভার রয়েছে তবে স্বতন্ত্রতার গ্যারান্টি validates_uniqueness_ofদেয় না । এটি কারণ আপনি ইভেন্টগুলির এই ক্রমটি পেতে পারেন (ক্রমটি গুরুত্বপূর্ণ):
- প্রক্রিয়া এ 'foo' নাম দিয়ে একটি নতুন ব্যবহারকারী তৈরি করার জন্য একটি অনুরোধ পেয়েছে
- প্রক্রিয়া বি একই কাজ করে
- প্রক্রিয়া এ 'ডিও'র নামটি এখনও বিদ্যমান কিনা তা জিজ্ঞাসা করে' ফু 'এর স্বতন্ত্রতাটিকে বৈধতা দেয় এবং ডিবি বলে যে নামটি এখনও নেই।
- প্রক্রিয়া বি একই কাজ করে এবং একই প্রতিক্রিয়া পায়
- প্রক্রিয়া একটি
insertনতুন রেকর্ডের জন্য বিবৃতি জমা দেয় এবং সফল হয়
- আপনার যদি সেই ক্ষেত্রটির জন্য স্বতন্ত্রতার প্রয়োজনের কোনও ডাটাবেস সীমাবদ্ধতা থাকে তবে প্রসেস বি
insertনতুন রেকর্ডের জন্য বিবৃতি জমা দেবে এবং এসকিউএল অ্যাডাপ্টার থেকে ফিরে আসা একটি কুরুচিপূর্ণ সার্ভার ব্যতিক্রম সহ ব্যর্থ হবে । আপনার কাছে যদি কোনও ডাটাবেস সীমাবদ্ধতা না থাকে তবে সন্নিবেশটি সফল হবে এবং নাম হিসাবে আপনার কাছে এখন 'ফু' দিয়ে দুটি সারি থাকবে।
validates_uniqueness_ofরেল ডকুমেন্টেশনে "কনক্যুরঞ্জি এবং অখণ্ডতা" দেখুন ।
তৃতীয় সংস্করণে রুবি থেকে :
... এর নাম সত্ত্বেও, যাচাই_পরিচয়_আপনি গ্যারান্টি দেয় না যে কলাম মানগুলি অনন্য হবে। এটি যা করতে পারে তা যাচাই করে যাচাই করা হয় যে কোনও কলামের বৈধতা সম্পাদনের সময় রেকর্ডে যাচাইয়ের সময়কার মতো মূল্য নেই। একই সাথে দুটি রেকর্ড তৈরি করা সম্ভব, প্রতিটি কলামের জন্য একই মানের সাথে অনন্য হওয়া উচিত এবং উভয় রেকর্ডের জন্য বৈধতা পাস করা সম্ভব। স্বতন্ত্রতা প্রয়োগের সবচেয়ে নির্ভরযোগ্য উপায় হ'ল ডাটাবেস-স্তরের সীমাবদ্ধতা ""
আরও দেখুন এই প্রোগ্রামার অভিজ্ঞতা সঙ্গে validates_uniqueness_of।
একটি নতুন উপায় তৈরি করার সময় একটি ওয়েব পেজ থেকে দুর্ঘটনাজনিত ডাবল-জমা দেওয়া হ'ল এটির একটি উপায়। এটি সমাধান করা খুব কঠিন কারণ ব্যবহারকারী যা ফিরে পাবে তা হ'ল দ্বিতীয় (কুরুচিপূর্ণ) ত্রুটি এবং এটি তাদের নিবন্ধন ব্যর্থ হওয়ার কথা ভাবায়, বাস্তবে এটি সফল হলে। এটি প্রতিরোধের জন্য আমি যে সর্বোত্তম উপায়টি খুঁজে পেয়েছি তা হ'ল ডাবল-জমা দেওয়া রোধ করার জন্য জাভাস্ক্রিপ্ট ব্যবহার করা use