¿Existe alguna práctica recomendada para definir tipos de error personalizados en una biblioteca Ruby (gema) o una aplicación Ruby on Rails? Específicamente:
- ¿Dónde pertenecen estructuralmente en el proyecto? ¿Un archivo separado, alineado con la definición de módulo / clase relevante, en otro lugar?
- ¿Hay convenciones que establecen cuando a y cuando no a crear un nuevo tipo de error?
Las diferentes bibliotecas tienen diferentes formas de hacer las cosas, y no he notado ningún patrón real. Algunas bibliotecas siempre usan tipos de error personalizados, mientras que otras no las usan en absoluto; algunos tienen todos los errores extendiendo StandardError mientras que otros tienen jerarquías anidadas; algunos son solo definiciones de clase vacías, otros tienen todo tipo de trucos ingeniosos.
Ah, y solo porque siento que llamar a estos "tipos de error" es algo ambiguo, lo que quiero decir es esto:
class AuthenticationError < StandardError; end
class InvalidUsername < AuthenticationError; end
fuente
httparty
: github.com/jnunemaker/httparty/blob/…Exceptions
módulo?/lib
no es el lugar para errores. Son muy específicos de la aplicación y tengo la impresión de que el código que estoy poniendo/lib
está destinado a ser código que podría reutilizarse en otras aplicaciones.Unable to autoload constant Exceptions, expected /app/lib/exceptions.rb to define it
la otra opción sería una clase por excepción, creoCreo que para tener archivos fuente cohesivos en su proyecto, debe definir errores en la clase en la que pueda arrojarlos y en ningún otro lugar.
Alguna jerarquía puede ser útil: los espacios de nombres son buenos para mantener las cadenas redundantes fuera de los nombres de tipo, pero eso es más una cuestión de gustos: no hay necesidad de exagerar siempre que tenga al menos un tipo de excepción personalizado en su aplicación que use para diferenciar entre casos de excepción 'intencionales' y 'accidentales'.
fuente
en rieles puedes hacer
app/errors
directorioreinicie spring / server y debería recogerlo
fuente
raise FooError, "Example message..."
oraise FooError.new("Example message...")
Esta es una pregunta antigua, pero quería compartir cómo manejo los errores personalizados en Rails, incluyendo adjuntar mensajes de error, pruebas y cómo manejar esto con los
ActiveRecord
modelos.Creando error personalizado
Prueba (minitest)
Con ActiveRecord
Creo que vale la pena señalar que si se trabaja con un
ActiveRecord
modelo, un patrón popular es agregar un error al modelo como se describe a continuación, para que sus validaciones fallen:Cuando se ejecutan las validaciones, este método se acoplará a la
ActiveRecord::RecordInvalid
clase de error de ActiveRecord y hará que las validaciones fallen.¡Espero que esto ayude!
fuente
Para garantizar que la carga automática funcione como se esperaba en Rails 4.1.10 para múltiples clases de error personalizadas, querrá especificar archivos separados para cada una. Esto debería funcionar en desarrollo con su recarga dinámica.
Así es como configuro errores en un proyecto reciente:
En
lib/app_name/error/base.rb
y en errores personalizados posteriores, como en
lib/app_name/error/bad_stuff.rb
Entonces debería poder llamar a sus errores a través de:
fuente
lib/app_name/error.rb
uninitialized constant MyController::AppName
. Estoy llamando a subir en mi controlador