2011-09-25 22 views
5

Doğrulamayı yalnızca belirli formlarda (denetleyicinin eylemi) tetiklemek için herhangi bir yol var mı? User.create(:validate=>true) bayrağı gibi bir şey. ,Yalnızca belirli bir formda doğrulama

s = SomeModel.new 
s.make_special 
+0

Bunu neden yapmaya çalışıyorsunuz? Belki de sorunuzun arkasındaki nedenleri biliyorsak daha iyi bir cevap verebiliriz. – rdvdijk

+0

Kullanıcı profilim, profilden ayrılmadım, kayıt olduğunuzda sadece birkaç alan sağlamanız ve dinlenme işleminin kullanıcı eylemini düzenlemesi için doldurmanız gerekiyor. – methyl

+0

Btw, şu şekilde tüm doğrulamaları iletebilir: Model.save (false) – emrahbasman

cevap

8

Evet, mesela, doğrulamaları için conditionals sağlayabilmektedir Yeni kayıtların geçerliliğini atlamak istersiniz. Bu durumda, thomasfedb cevabını kullanabilirsiniz, ancak @special değişken kullanın yok ama:

validates_presence_of :something, :if => :persisted? 

Bu kaydedilmiş User s için sadece doğrulamak, ancak yeni User s için olacaktır. persisted?'daki API belgelerine bakın.

+0

Yani, kaydetme modelinden sonra yanlış için özel ayarlamalıyım, değil mi? – methyl

+0

Hayır. 'Özel 'sadece bir örnek değişkenidir. Yapacak daha fazla işiniz olmadıkça, sadece ölmesine izin verebilirsiniz, daha fazla veritabanı sorgusu için kalıcı olmayacaktır. – thomasfedb

4

yorumlarınızla açıklandığı gibi:

validates_presence_of :something, :if => :special? 

private 

def make_sepcial 
    @special = true 
end 

def special? 
    @special 
end 

Artık bu doğrulamaları açmak için yapmanız gereken tek şey:

+0

Ayrıca şunları kullanabilirsiniz: without =>: persisted? Eğer ters yönde doğrulama istiyorsanız yeni ama kaydedilmemiş. –

+0

Doğru cevap budur – doz87

İlgili konular