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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top