2011-10-07 18 views
13

Es posible utilizar una función como get_by_id_or_404 en rieles. Para exemple, en mi controlador yo uso:Obtener modelo o 404 en Rails

@destination = Destination.find_by_id(params[:id]) 

Si el ID no se ha establecido o el destino no encontrado, ¿cómo puedo pedir a los carriles para redirigir a una página 404?

¡Gracias!

Respuesta

30

En el modo de producción, rieles rescata automáticamente la excepción ActiveRecord::RecordNotFound por la prestación de la página de error 404.

Simplemente utilice la versión bang del buscador que aumenta ActiveRecord::RecordNotFound cuando no se encuentra ningún resultado.

@destination = Destination.find_by_id!(params[:id]) 

Sin embargo, en su caso, no hay razón para usar el método find_by. Simplemente retroceda al find.

@destination = Destination.find(params[:id]) 
1

Creo en la producción, que elevará el error y mostrar el ou 404 500.

+2

A menos que cambie el método del buscador, ese método no generará ninguna excepción. –

4

Esto es de the guide: (!)

Puede especificar un signo de exclamación en el extremo de la buscadores dinámicas para conseguir que se plantean un error ActiveRecord :: RecordNotFound si no devuelve ningún registro, como Client.find_by_name! ("Ryan")

Cuando esto sucede, Rails representar la página 404 para usted. Además, basta con utilizar find como un acceso directo para find_by_id:

@destination = Destination.find!(params[:id]) 
+1

¡No es necesario el signo de exclamación! Verifique [docs for 'find'] (http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find), levantará RecordNotFound si le pasa una identificación. – molf

+1

¡Supongo que querías decir que find es un atajo para find_by_id! –

Cuestiones relacionadas