çoklu özelliklerde benzersizliği 3 raylar


177

Rails 3.0.0.beta4 kullanıyorum

Ben iki özniteliğe benzersizlik üzerinde bir doğrulama eklemek istiyorum, bu demektir ki çift 'recorded_at've 'zipcode'benzersiz ise benim model geçerli .

Bir özellikte sözdizimi

validates :zipcode, :uniqueness => true

Teşekkürler

Yanıtlar:


333

Rails 2'de şunu yazardım:

validates_uniqueness_of :zipcode, :scope => :recorded_at

Raylar 3'te:

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

Birden çok özellik için:

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

7
Mantıksal olarak recorded_at, bir posta kodu kapsamında benzersiz olmanız gerektiğini söylemek daha anlamlı olur . validate :recorded_at, : uniqueness => { :scope => :zipcode }
Ariejan

2
yine de rayları 2 şekilde yapabilirsiniz ve aynı özellik üzerinde çeşitli doğrulama türleri yapmadığınız sürece bunu daha okunabilir buluyorum.
zem

24
ile üç kişilik bir grubu doğrular validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}mısın?
Greg Guida

5
:scopeYabancı anahtarlarda kullanmak istiyorsanız , "temel" çalışıyor olsa bile :fkey_idsembolleri kullanmak :fkey:uniqueness:fkey
zorundasınız

1
Muhtemelen özel bir hata mesajı eklemek istiyorsunuz, :message => ' is taken for this recorded date'
laffuste

96

Çoklu Kapsam Parametreleri:

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

Bu Greg'in sorusunu cevaplamalıdır.


Greg 'validates' kısayolunu kullanmakla daha ilgili görünüyordu, bu yüzden sorusuna daha hızlı bir cevap "evet"
elc

Bu bilmek oldukça önemlidir, kapsamlarda dernekleri kontrol ederken _id (veya değil) kullanmam gerekirse tam olarak buna bakıyordum.
Francesco Belladonna

Bu yanıt Raylar 4.1.6'da çalışır validates_uniqueness_of: cart_id, kapsam: [: location_id,: plug_id]
Conor

6

Benim için çalışma , çoğul kapsam koymak gerekir

validates_uniqueness_of: teacher_id,: scope s => [: dönem_kimliği,: sınıf_kimliği]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.