40
size eşsiz kombine böyle bir değere sahip emin olmak için doğrulamaları kullanabilirsiniz

yılında Raylar 2.x: bu gibi görünebilir gelen taşımadaRaylar 3: doğrulama kombine değerler

validates_uniqueness_of :husband, :scope => :wife 

:

add_index :family, [:husband, :wife], :unique => true 

Bu, karı/koca kombinasyonunun veritabanında benzersiz olduğundan emin olur. Şimdi, Rails 3'te doğrulama sözdizimi değişti ve kapsam özniteliği gitmiş gibi görünüyor. Şimdiki gibi görünüyor:

validates :husband, :presence => true 

Rails 3'te birleştirilmiş doğrulamayı nasıl başarabilirim? Rails 2.x onaylamaları hala Rails 3'te çalışmaktadır, bu yüzden ilk örneği kullanmaya devam edebilirim, ancak "eski" gibi görünüyor, daha iyi yollar var mı?

cevap

57

Benimle kal. ActiveModel çalışmalarında doğrulama yönteminin yolu bir Doğrulayıcı aramaktır.

:presence => true, PresenceValidator arar ve şu seçeneklerden birini geçirir: true validator'un başlatıcısına.

Sana

validates :husband, :presence => true, :uniqueness => {:scope => :wife} 

istediğini düşünüyorum (benzersizliği doğrulayıcı aslında ActiveRecord parçası değil, ActiveModel. Geliştiricileri bu nasıl oluşturduğuna Gerçekten ilginç. Oldukça zarif.) Ben sadece bu teyit

+1

kendi uygulamasında çalışır. – epochwolf

+0

Bu kulağa harika ve temiz geliyor ama hepsi ... ... benim örneğimde çalışmıyorum 'tek modelli proje' denedim. Sizler özel bir şey yaptınız mı? Ben 2 dizeleri kullandım ve 2 tamsayı ile denedim ama geçerlilikleri sadece geçiyor. – Cimm

+0

Şu anda kullanıyorum: validates: content,: presence => true,: uniqueness => {: scope =>: comment_thread_id,: message => "zaten söylendi, lütfen anlamlı bir şey ekleyin"} ' – epochwolf