9

我正在使用一些遗留的 RoR 代码,它有四个相关的类,每个类都定义在自己的文件中。所有这些类都是解析器类,并且存在于 app/models/parsers 中。每个文件名都以 _parser.rb 结尾。

这是来自文件 adf_parser.rb 的示例类定义行:

class Parsers::AdfParser

我不知道 Parsers:: 的一部分在做什么。

  • 在我能找到的任何地方都没有定义名为 Parsers 的显式模块。
  • 我没有看到任何有关仅通过将模块规范添加到类名来隐式创建模块的文档。
  • 唯一的外部依赖是“需要'csv'”。
  • 类 def 中有 include 语句,但我认为它们没有任何可以解释类名的东西。
  • 我创建了一个新的 RoR 测试项目并将这些文件的存根放在并行目录中,由于名称错误,它们不会从命令行运行。
  • 我没有看到任何以这种方式命名的类的在线示例。

我敢肯定这不是火箭手术,但我早上的大部分时间都在试图弄清楚这一点,如果有人能告诉我这是怎么回事,我会很高兴的。

更新:听起来这只是基于子目录名称的一点 Rails 魔法。我认为我在测试应用程序中出错的原因是我只是通过 ruby​​ 解释器运行文件,而不是以某种方式使用 Rails 调用它们。

4

2 回答 2

8

class Parsers::AdfParser在实践中相当于:

module Parsers
  class AdfParser

为了使其正常工作,并且要自动加载的文件,其位置应该是 parsers/adf_parser.rb,无论是在 app/models 还是 lib 下。基本上文件路径需要模仿类层次结构。

于 2013-03-19T17:33:10.227 回答
3

它在parsers模块的子目录中;按照惯例为您提供 Rails 命名空间。

于 2013-03-19T17:39:17.740 回答