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

denisjacquemin
sumber

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]}
Christian Lescuyer
sumber
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.

sinar
sumber
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]

Yesus
sumber