Además de la explicación de runako, en realidad es muy útil tener la opción de si se genera una excepción o no. Estoy trabajando en una aplicación de blog y quería agregar soporte para ver la entrada de blog siguiente o anterior. Yo era capaz de añadir dos métodos de instancia a mi modelo Post
que simplemente regresan nil
cuando intenta obtener el post anterior cuando se visualiza el primer mensaje, o el siguiente mensaje cuando se ve el último mensaje:
def next
Post.find_by_id(id + 1)
end
def previous
Post.find_by_id(id - 1)
end
Esto evita mi código auxiliar que genera de forma condicional los enlaces Publicar anterior/Siguiente publicación de tener que manejar la excepción RecordNotFound
, lo que sería malo porque estaría utilizando una excepción para el flujo de control.
Pero, ¿cuál es la ventaja de que regrese RecordNotFound? ¿Por qué alguien querría este comportamiento en lugar de simplemente devolver nada? – Arcolye
Se genera RecordNotFound, no se devuelve. Esto permite que el flujo de control de la persona que llama sea diferente, porque no tiene que verificar que el valor de retorno sea nulo (en su lugar, usaría un bloque de inicio/rescate). – runako
Eso todavía no explica por qué es el comportamiento predeterminado donde en la mayoría de las otras partes de ActiveRecord, el comportamiento predeterminado es devolver nil o false para las fallas, y dejar el flujo de control de excepción a los métodos que terminan en un bang (#save!) . –