मेरे पास एक 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
कुछ और उदाहरणों के लिए प्रलेखन देखें ।