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

时间:2008-11-12 20:02:11

标签: ruby-on-rails ruby rake

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

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

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

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

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

一般来说,在我经常发现rails已经有解决方案之前我遇到过这样的问题,但我并不知道这个惯例。 这是其中一个案例吗?

2 个答案:

答案 0 :(得分:22)

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

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

class MyFoo
end

lib/my_foo.rb中,然后只需拨打

即可
MyFoo.new
从控制器

加载代码,而不需要require 'my_foo'

答案 1 :(得分:1)

./ lib绝对是值得去的地方。

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