Onde deve código minha não-modelo / não-controlador ao vivo?
-
08-07-2019 - |
Pergunta
Eu escrevi um app Rails que segue a estrutura regular de diretório (código do modelo em modelos, código do controlador em controladores).
Mas eu estou trabalhando agora em um novo recurso e para que eu tenha escrito alguns (que eu chamaria de) código "serviço".
O novo recurso é para importar alguns dados no sistema, no momento em que é duas classes para fazer a importação, mas poderia expandir-se para mais.
Eu não acredito que o novo código pertence a modelo como ele não está modelando qualquer objeto (não é diretamente relacionado a um único objeto também. Eu certamente não acho que pertence controlador quer como não é a lógica de apresentação.
Então, eu criei um "/ serviços app" diretório e colocá-lo lá. Também criei um diretório "test / serviços", onde ponho as minhas provas.
Tudo bem que eu pensava, mas quando eu corro 'ancinho: test' ou testes meus novos serviços 'autoteste' não são executados
.
Agora eu espero que há uma maneira de fazer ancinho buscá-las, mas isso é uma bandeira de advertência que fiz algo errado?
Existe algum outro lugar o código deve viver ou estou de alguma forma não fazer as coisas "do jeito Rails"?
Geralmente, sempre que eu bati um problema como este antes que eu tenha encontrado geralmente que rails tinha uma solução já, mas eu não estava ciente da convenção. É este um dos casos?
Solução
Este é o que o 'lib' pasta é para.
A pasta lib está no caminho automaticamente olhou para cima, de modo que você pode ter
class MyFoo
end
em lib/my_foo.rb
e então apenas chamando
MyFoo.new
de um controlador o código será carregado sem ser necessário um require 'my_foo'
Outras dicas
./ lib é definitivamente o lugar para ir.
Outro lugar para colocar isso está no diretório initializers sob configuração, dependendo do que é seu fazer. Você também pode considerar fazer a coisa toda em um plugin, mas se é uma pequena quantidade de funcionalidade, provavelmente não vale a pena.