我的非模型/非控制器代码应该在哪里生效?
-
08-07-2019 - |
题
我编写了一个跟随常规目录结构的rails应用程序(模型中的模型代码,控制器中的控制器代码)。
但我现在正在研究一项新功能,为此我写了一些(我会称之为)“服务”。代码。结果 新功能是将一些数据导入系统,目前只有两个类进行导入,但可以扩展到更多。
我不相信新代码属于模型,因为它不会对任何对象建模(它也不与任何单个对象直接相关)。 我当然不认为它属于控制器,因为它不是表示逻辑。
所以,我创建了一个“app / services”目录并把它放在那里。 我还创建了一个“测试/服务”。我已经完成测试的目录。
我认为一切都很好但是当我运行'rake:test'或'autotest'时,我的新服务测试没有运行。
现在我希望有一种方法可以让rake拿起它们,但这是一个警告标志,我做错了什么?
代码应该存在其他地方,还是我在某种程度上不做“Rails方式”?
一般来说,在我经常发现rails已经有解决方案之前我遇到过这样的问题,但我并不知道这个惯例。 这是其中一个案例吗?
解决方案
这就是'lib'文件夹的用途。
lib文件夹位于自动查找路径中,因此您可以
class MyFoo
end
在 lib / my_foo.rb
中,然后只需调用
MyFoo.new
从控制器加载代码而不需要 require'my_foo'
其他提示
./ lib绝对是值得去的地方。
另一个放置它的地方是在config下的initializers目录中,具体取决于你在做什么。您也可以考虑将整个内容整合到一个插件中,但如果它是一个少量的功能,那么它可能是不值得的。
不隶属于 StackOverflow