locknet.ro

archive

Ordinea Validarii in Rails

M-am confruntat zilele trecute cu o problema ciudata intr-o aplicatie Rails.
Foloseam validates_presence_of :foo pentru a valida prezenta unui camp, dar si o validare specializata, validate :foo_is_not_bar unde asteptam o valoare pentru campului folosit.
Credeam ca in Rails, validarile ajutatoare (validation helpers) sunt executate inaintea metodei mele. Ei bine, este exact invers, si pana acum nu am gasit o modalitate de a schimba oridinea de executare a acestor metode, si, citind sursele metodei valid? nici nu cred ca se poate.
Asa ca, nu te astepta sa primesti valoarea unui camp, vei avea nil si o eroare daca respectivul camp nu a fost completat.

Te poti intalni cu asa ceva, cand folosesti numericality_of si doresti ca numarul primit sa fie pozitiv. Pentru asta, pe langa validates_presence_of :price, validates_numericality_of :price va trebui sa mai adaugi o validare pentru a verifica ca pretul este pozitiv validate :price_should_be_positive exemplul este asemanator cu cel din Agile Web Development with Rails - First Ediition, pagina 67:

def price_should_be_positive
  errors.add(:price, "Should be positive") unless price.nil? || price > 0.0
end

Nu mi se pare normal sa mai adaug si price.nil?, atat timp cat folosesc si validates_presence_of :price.