ฉันมีRelease
แบบจำลองmedium
และcountry
คอลัมน์ (อื่น ๆ ) ไม่ควรมีreleases
ที่ใช้ร่วมกันmedium
/ country
ชุดค่าผสมที่เหมือนกัน
ฉันจะเขียนสิ่งนี้เป็นการตรวจสอบรางได้อย่างไร
ฉันมีRelease
แบบจำลองmedium
และcountry
คอลัมน์ (อื่น ๆ ) ไม่ควรมีreleases
ที่ใช้ร่วมกันmedium
/ country
ชุดค่าผสมที่เหมือนกัน
ฉันจะเขียนสิ่งนี้เป็นการตรวจสอบรางได้อย่างไร
คำตอบ:
คุณสามารถใช้การตรวจสอบความเป็นเอกลักษณ์กับscope
ตัวเลือก
นอกจากนี้คุณควรเพิ่มดัชนีเฉพาะในฐานข้อมูลเพื่อป้องกันไม่ให้ระเบียนใหม่ผ่านการตรวจสอบเมื่อตรวจสอบพร้อมกันก่อนที่จะเขียน:
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
ดูเอกสารประกอบสำหรับตัวอย่างเพิ่มเติม