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.