rel 3 validasi pada keunikan pada beberapa atribut


177

Saya menggunakan Rails 3.0.0.beta4

Saya ingin menambahkan validasi pada keunikan pada dua atribut, itu berarti bahwa model saya valid jika pasangan 'recorded_at'dan 'zipcode'unik.

Pada satu atribut di sini adalah sintaks

validates :zipcode, :uniqueness => true

Terima kasih

Jawaban:


333

Dalam Rails 2, saya akan menulis:

validates_uniqueness_of :zipcode, :scope => :recorded_at

Dalam Rails 3:

validates :zipcode, :uniqueness => {:scope => :recorded_at}

Untuk banyak atribut:

validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}

7
Saya akan mengatakan bahwa secara logis lebih masuk akal untuk mengatakan bahwa Anda recorded_atharus unik dalam lingkup kode pos. validate :recorded_at, : uniqueness => { :scope => :zipcode }
— Ariejan

2
Anda masih dapat melakukannya dengan 2 rel, dan saya menemukan itu lebih mudah dibaca kecuali jika Anda melakukan beberapa jenis validasi pada properti yang sama.
— zem

24
apakah Anda akan memvalidasi kelompok tiga dengan validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}?
— Greg Guida

5
Saya akan menambahkan bahwa jika Anda ingin menggunakan :scopekunci asing, Anda harus menggunakan :fkey_idsimbol, bukan :fkeyyang, bahkan jika "dasar" :uniquenessbekerja pada:fkey
— nbarraille

1
Anda mungkin ingin menambahkan pesan kesalahan khusus seperti, :message => ' is taken for this recorded date'
— laffuste

96

Beberapa Parameter Lingkup:

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end

http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of

Ini seharusnya menjawab pertanyaan Greg.


Greg sepertinya lebih tertarik menggunakan jalan pintas 'validasi', jadi jawaban yang lebih cepat untuk pertanyaannya adalah "ya"
— elc

Ini cukup penting untuk diketahui, saya mencari persis ini jika saya harus menggunakan _id (atau tidak) ketika memeriksa asosiasi dalam cakupan.
— Francesco Belladonna

Jawaban ini berfungsi di Rails 4.1.6 validates_uniqueness_of: cart_id, lingkup: [: location_id,: plug_id]
— Conor

6

Jangan bekerja untuk saya, perlu menempatkan ruang lingkup dalam bentuk jamak

validates_uniqueness_of: teacher_id,: scope s => [: semester_id,: class_id]

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.