- Database Constraints
- Client-Side validation
- Controller-level validation
- Model-level validation
Database Constraints ve stored procedures, validation kontrolünü veritabanı bağımlı yapmaktadır.Aynı veritabanı birden fazla uygulama tarafından kullanılıyorsa, validation kontrolünü veritabanı üzerinden yapmak daha mantıklı olacaktır.
Client-Side Validation kullanışlı olmakla beraber genellikle tercih edilmez. Eğer JavaScript kullanıyorsanız, Browser’ın Javascript i kapatılmışsa veriler denetimden geçmeden işlenir.
Controller-level’de validation kontrolünün yapılması genelde tercih edilmez çünkü burda iş mantığı ön plandadır ve testinin yapılması zor olur.
Model-level’de validation kontrolünün yapılması en çok tercih edilen katmandır. Nedenlerinden biri son kullanıcı tarafından bypass edilememesidir. Rails framework’unda da validation kontrolünün model’de kullanımını kolaylaştırması ve testinin rahat yapılması tercih nedenleri arasında sayılır.
validates_presence_of
Nesnedeki alanın tanımlı olması ve boş olmamasını kontrol etmektedir.
class Person ‘<’ ActiveRecord::Base
validates_presence_of :soyadi
end
valid? ve invalid?
Nesnenin geçerliliğini kontrol eder. valid? örneği aşağıdaki gibidir, invalid? ise tam tersi durumu ifade eder.
Person.create(:soyadi => “akdeniz”).valid? //Sonuc true
Person.create(:soyadi => nil).valid? // Sonuc false
errors.invalid?
Validation çalıştırıldıktan sonra kullanımı mantıklıdır. Errors’un veri yapısında Collection vardır, nesnenin alanlarını kontrol ettikçe hata varsa ilgili hata mesajını Collection’a atar, yani nesnenin tümünün geçerliliğini kontrol etmek yerine nesnedeki tanımlı alanların geçerliliğini ayrı ayrı kontrol etmemizi sağlar.
person = Person.new
person.errors.invalid?(:soyadi) // Geçerli değilse true döner.
validates_associated
Modeller arasındaki ilişkilerden bahsetmiştik. Bir modeli kaydederken, modelle ilişili diğer modellerdeki alanların geçerliliğinin kontrolünün yapılmasını sağlar, eğer diğer modellerin validation kontrolü geçerli ise kaydetme sürecini başarıyla tamamlar, tersi durumda aykırı durum hatası alır. Kullanımı aşağıdaki gibidir.
class Yazar ‘<’ ActiveRecord::Base
has_many :books
validates_associated : books
end
validates_confirmation_of
Nesne içindeki iki alanın aynı içerikte olması durumunda kullanılır. Örneğin: kullanıcının email adresinin teyit edilmesinde kullanılır. İkinci alanın sonuna “_confirmation” eklenerek yapılır. Default olarak verilen hata mesajı “doesn’t match confirmation”.
class Person ‘<’ ActiveRecord::Base
validates_confirmation_of :email
validates_presence_of : email_confirmation
end
text_field :person, :email
text_field :person, :email_confirmation
validates_exclusion_of ve validates inclusion_of
Nesne içindeki alanın içeriğini kontrol eder, örneğin kullanıcı yaş sınırını kontrol etmek istiyorsak, 18-40 yaş arası kullanıcılar (inclusion_of) ya da 18 altı ve 40 yaş üstü (exclusion_of) (biraz saçma oldu ama J ) kullanıcılar üye olabilir. Kullanım şekli örnekte verilmiştir.
class Person ‘<’ ActiveRecord::Base
validates_exclusion_of: yas, :in => 18..40, :message => “18 altı ve 40 altı yaş ustu”
validates_inclusion_of: yas, :in => 18..40 //18 ile 40 yaşları arası
end
validates_length_of
Nesne içinde istenen alanın uzunluk sınırlamasını kontrol etmek için kullanılır.
validates_length_of :soyadi, maximum => 30, :message => “30 dan az karakter girilmeli.”
Validation Çeşitleri
Uygulamanızın validation kontrolünü yapmanız için model içinde validate metodunu kodlamamız gerekir. Validate metod çeşitleri aşağıdaki gibidir.
- validate
- validate_on_create
- validate_on_update
ActiveRecord çağrılmadan önce validate metodu çağrılır, ikincil olarak kayıt yaratılacaksa ‘validate_on_create’, güncelleme yapılacaksa ‘validate_on_update’ metodları çağrılır. Örnek kullanım aşağıda verilmiştir.
class Person ‘<’ ActiveRecord::Base
def validate
if soyadi.blank?
errors.add_to_base(“Lütfen soyadı bilgisini giriniz”)
end
def validate_on_create
if adi.blank?
errors.add(:adi,“Lütfen ad bilgisini giriniz”)
end
def validate_on_update
end
end
Hiç yorum yok:
Yorum Gönder