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