ruby on rails - query - Rails: ¿Por qué find(id) genera una excepción en los rieles?
rails sql query (2)
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. Pude agregar dos métodos de instancia a mi modelo de Post
que simplemente devuelven nil
cuando intentas obtener la publicación anterior al ver la primera publicación, o la próxima publicación cuando ves la última publicación:
def next
Post.find_by_id(id + 1)
end
def previous
Post.find_by_id(id - 1)
end
Esto evita que mi código auxiliar que genera condicionalmente los enlaces RecordNotFound
anteriores / RecordNotFound
posteriores tenga que manejar la excepción RecordNotFound
, lo que sería malo porque estaría utilizando una excepción para el flujo de control.
Posible duplicado:
Model.find (1) da error de ActiveRecord cuando el id 1 no existe
Si no hay un usuario con una identificación de 1 en la base de datos, intentar User.find(1)
generará una excepción.
¿Por qué es esto?
Porque esa es la forma en que los arquitectos intentaron encontrar (id) para trabajar, como se indica en el RDOC:
Buscar por id: puede ser un id. Específico (1), una lista de ids (1, 5, 6) o un conjunto de ids ([5, 6, 10]). Si no se puede encontrar ningún registro para todos los ID enumerados, se generará RecordNotFound.
Si no desea que se levante la excepción, use find_by_id, que devolverá nil si no puede encontrar un objeto con el ID especificado. Su ejemplo sería User.find_by_id(1)
.