update rails query left includes create active ruby-on-rails activerecord

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) .