我的非模型/非控制器代码应该在哪里生效?

我编写了一个跟随常规目录结构的rails应用程序(模型中的模型代码,控制器中的控制器代码)。

但我现在正在开发一个新function,为此我写了一些(我称之为)“服务”代码。
新function是将一些数据导入系统,目前它有两个类进行导入,但可以扩展到更多。

我不相信新代码属于模型,因为它没有对任何对象建模(它也不直接与任何单个对象相关。我当然不认为它属于控制器,因为它不是表示逻辑。

所以,我创建了一个“app / services”目录并将其放在那里。 我还创建了一个“测试/服务”目录,我已经进行了测试。

我认为一切都很好,但是当我运行’rake:test’或’autotest’时,我的新服务测试没有运行。
现在我希望有一种方法可以让rake拿起它们,但这是一个警告标志,我做错了什么?
代码应该存在其他地方还是我不知道“Rails方式”做什么?

通常,每当我遇到这样的问题之前,我通常都会发现rails已经有了解决方案,但我并不知道这个惯例。 这是其中一个案例吗?

这就是’lib’文件夹的用途。

lib文件夹位于自动查找路径中,因此您可以拥有

class MyFoo end 

lib/my_foo.rb然后只是通过调用

 MyFoo.new 

从控制器加载代码而不require 'my_foo'

./lib绝对是个好去处。

放置它的另一个地方是在config下的初始化器目录中,具体取决于你在做什么。 您也可以考虑将整个内容整合到一个插件中,但如果它是一个少量的function,它可能是不值得的。