Non so se vi e` mai capitato… Supponiamo di avere un modello, per esempio News con un campo nel database public_on che indica la data di pubblicazione della news. Ora se quando viene creata la news non viene impostato nessun valore per public_on esso risulta nullo e quindi se chiamiamo my_news.public_on otteniamo nil.
E` veramente un pacco ogni volta fare un if per verificare se questo campo non e` nil.
Una soluzione e` quella di fare un metodo nel model news.rb come segue:
def public_on
return self.public_on unless self.public_on.nil?
return self.created_at
end
Ovviamente pero` eseguendo questo codice otteniamo l’errore stack level too deep in quanto il self.public_on diventa una chiamata ricorsiva e non l’accesso all’attributo.
Per ovviare al problema cambiamo il metodo nel seguente modo:
def public_on
return self[:public_on] unless self[:public_on].nil?
return self.created_at
end
Ricordiamoci anche di definire il metodo di assegnazione (=):
def public_on=(val)
self[:public_on] = val
end
blog comments powered by Disqus