13

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

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

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

所以,我创建了一个“app/services”目录并把它放在那里。我还创建了一个“测试/服务”目录,我在其中放置了我的测试。

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

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

4

2 回答 2

22

这就是“lib”文件夹的用途。

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

class MyFoo
end

进去lib/my_foo.rb,然后打电话

MyFoo.new

从控制器将加载代码,而您不需要require 'my_foo'

于 2008-11-12T20:04:45.873 回答
1

./lib 绝对是个好去处。

另一个放置它的地方是 config 下的 initializers 目录,这取决于你在做什么。你也可以考虑把整个东西做成一个插件,但如果它是少量的功能,它可能不值得。

于 2008-11-12T20:07:20.237 回答