Existe uma prática recomendada para definir tipos de erro personalizados em uma biblioteca Ruby (gem) ou aplicativo Ruby on Rails? Especificamente:
- Onde eles pertencem estruturalmente ao projeto? Um arquivo separado, alinhado com a definição de módulo / classe relevante, em outro lugar?
- Existem quaisquer convenções que estabelecem quando para e quando para não criar um novo tipo de erro?
Bibliotecas diferentes têm maneiras diferentes de fazer as coisas, e eu não notei nenhum padrão real. Algumas bibliotecas sempre usam tipos de erro personalizados, enquanto outras não os usam; alguns têm todos os erros que estendem o StandardError enquanto outros têm hierarquias aninhadas; alguns são apenas definições de classe vazias, outros têm todo tipo de truques inteligentes.
Ah, e só porque sinto que chamar esses "tipos de erro" é meio ambíguo, o que quero dizer é o seguinte:
class AuthenticationError < StandardError; end
class InvalidUsername < AuthenticationError; end
fonte
httparty
: github.com/jnunemaker/httparty/blob/…Exceptions
módulo?/lib
pode não ser o lugar para erros. Eles são muito específicos de aplicativos e tenho a impressão de que o código que estou inserindo/lib
deve ser um código que poderia ser reutilizado em outros aplicativos.Unable to autoload constant Exceptions, expected /app/lib/exceptions.rb to define it
a outra opção seria uma classe por exceção, eu achoEu acho que, para ter arquivos de origem coesos em seu projeto, você deve definir erros na classe em que os podem ser lançados e em nenhum outro lugar.
Alguma hierarquia pode ser útil - os namespaces são bons para manter seqüências redundantes de nomes de tipo - mas isso é mais uma questão de gosto - não há necessidade de exagerar, desde que você tenha pelo menos um tipo de exceção personalizado no aplicativo que você usa para diferenciar entre casos de exceção 'intencional' e 'acidental'.
fonte
nos trilhos você pode criar
app/errors
diretórioreinicie o spring / server e deve buscá-lo
fonte
raise FooError, "Example message..."
ouraise FooError.new("Example message...")
Essa é uma pergunta antiga, mas eu gostaria de compartilhar como estou lidando com erros personalizados no Rails, incluindo anexar mensagens de erro, testes e como lidar com isso com
ActiveRecord
modelos.Criando erro personalizado
Teste (miniteste)
Com o ActiveRecord
Eu acho que vale a pena notar que, se estiver trabalhando com um
ActiveRecord
modelo, um padrão popular é adicionar um erro ao modelo, conforme descrito abaixo, para que suas validações falhem:Quando as validações são executadas, esse método retorna à
ActiveRecord::RecordInvalid
classe de erro do ActiveRecord e causa falhas nas validações.Espero que isto ajude!
fonte
Para garantir que o carregamento automático funcione conforme o esperado no Rails 4.1.10 para várias classes de erro personalizadas, você deve especificar arquivos separados para cada uma. Isso deve funcionar no desenvolvimento com seu recarregamento dinâmico.
É assim que eu configuro erros em um projeto recente:
No
lib/app_name/error/base.rb
e em erros personalizados subsequentes, como em
lib/app_name/error/bad_stuff.rb
Você poderá chamar seus erros por meio de:
fonte
lib/app_name/error.rb
uninitialized constant MyController::AppName
. Estou chamando raise no meu controller