मेरे पास एक Releaseमॉडल है mediumऔर countryकॉलम (दूसरों के बीच)। ऐसा नहीं होना चाहिए releasesकि समान medium/ countryसंयोजन साझा करें ।
मैं इसे रेल सत्यापन के रूप में कैसे लिखूंगा?
मेरे पास एक Releaseमॉडल है mediumऔर countryकॉलम (दूसरों के बीच)। ऐसा नहीं होना चाहिए releasesकि समान medium/ countryसंयोजन साझा करें ।
मैं इसे रेल सत्यापन के रूप में कैसे लिखूंगा?
जवाबों:
आप विकल्प के साथ एक विशिष्टता सत्यापन का उपयोग कर सकते हैं scope।
साथ ही, आपको लिखे जाने से पहले नए रिकॉर्ड को मान्यताओं को पारित करने से रोकने के लिए DB में एक अद्वितीय सूचकांक जोड़ना चाहिए:
class AddUniqueIndexToReleases < ActiveRecord::Migration
def change
add_index :releases, [:country, :medium], unique: true
end
end
class Release < ActiveRecord::Base
validates :country, uniqueness: { scope: :medium }
end
uniqueयह मान्यता प्राप्त नहीं है। उस भाग के लिए मैंने नीचे उत्तर का उपयोग किया है।
uniqueness, नहीं unique। लिंक किए गए दस्तावेज़ देखें। जवाब तय करना।
उपरोक्त सभी उत्तर गायब हैं कि एक मॉडल में कई विशेषताओं की विशिष्टता को कैसे मान्य किया जाए। नीचे दिए गए कोड में यह बताने का इरादा है कि एक दायरे में कई विशेषताओं का उपयोग कैसे किया जाए।
validates :country, uniqueness: { scope: [:medium, :another_medium] }
यह countryसभी पंक्तियों में mediumऔर के मूल्यों के साथ विशिष्टता को मान्य करता है another_medium।
नोट: उपरोक्त कॉलम पर एक इंडेक्स जोड़ना न भूलें, यह तेजी से पुनर्प्राप्ति को सुनिश्चित करता है और अद्वितीय रिकॉर्ड के लिए DB स्तर की मान्यता जोड़ता है।
अद्यतन: तालिका बनाते समय एक सूचकांक जोड़ने के लिए
t.index [:medium, :another_medium], unique: true
आप :scopeअपने सत्यापनकर्ता को इस तरह एक पैरामीटर पास कर सकते हैं :
validates_uniqueness_of :medium, scope: :country
कुछ और उदाहरणों के लिए प्रलेखन देखें ।