Ontem eu dei a dica do método try(). Porém só hoje fui perceber que existe uma exceção para o uso do método. Ele não vai funcionar se você estiver precisando recuperar a propriedade id do que deveria ser um registro do ActiveRecord se a variável for nula:
@person = nil
@person.try(:id)
Isto retornaria o seguinte:
Hmm… Isto não funciona porque a classe Object também tem uma propriedade id (que deve deixar de existir na próxima versão do ruby), e como a classe NilClass herda dela…
A melhor solução para resolver este problema na minha opinião seria usar algo assim:
##
# @person.name unless @person.nil?
# vs
# @person.try(:name)
self.send(method) unless self.nil?
end
end