Archivi categoria: Dynamic Programming Language

Appunti RoR: validazioni e save!

Quando utilizziamo ActiveRecord per rendere persistente un oggetto, sappiamo che è possibile dichiarare le validazioni per verificare le caratteristiche dei dati inseriti:

class Person < ActiveRecord::Base
  validates :name, length: { maximum: 20 }
end
Verificare la dimensione dei campi inseriti è fondamentale per evitare di scatenare errori al momento della scrittura del record, qualora il dato inserito ecceda la dimensione del campo.
Spesso nel controller viene usato del codice differente da quello generato dallo scaffold, e scopriamo che per salvare il dato esistono due differenti metodi: save e save! il primo è quello normalmente utilizzado nello scaffold, ma cosa fa save! ?
La differenza è che save se la validazione fallisce non fa nulla (e ritorna nil) invece save! scatena una eccezione.
Pertanto se desideriamo utilizzare save dobbiamo testare il valore di ritorno, se è nil dobbiamo agire in conseguenza del fatto che il dato non è stato salvato.
Come possiamo verificare questa condizione prima di eseguire save ?
semplice utilizzando il metodo valid?
if boo.valid?
   boo.save!  # non scateneremo eccezioni
else
              # dobbiamo correre ai ripari
end