如何在Rails中将模块拆分为多个文件?

时间:2016-05-10 08:31:23

标签: ruby-on-rails

在我的Rails应用程序中,我有一个模块,它包含构成API包装器的所有类。这是模块的结构:

(file:zway.rb)

module Zway
  class API
  # instantiates API object
  end

  class Main
  # holds top level functions
  end

  class Controller
  # holds controller functions
  end

  class Error < StandardError
  end
  class BadRequestError < Error
  end
end

现在该模块变得太大而无法将其保存在一个文件中,因此我想将其拆分。由于模块中有几个类,我认为每个大类都应该是一个文件。所以我没有多想,但试图拿出一个课程,看看它是否有效。像这样:

(file:zway.rb)

module Zway
  class API
  # instantiates API object
  end

  class Controller
  # holds controller functions
  end

  class Error < StandardError
  end
  class BadRequestError < Error
  end
end

(file:main.rb)

module Zway
  class Main
  end
end

但是现在我收到了这个错误,这对我来说听起来并不正确,因为我确实错误地抱怨了:在main.rb中定义类Main:

Unable to autoload constant Main, expected /bla/homer/app/models/main.rb to define it

我在网上搜索了如何使用模块,但我发现的主要是多重继承和命名空间。但不是关于使用模块来组织代码的实践。

1 个答案:

答案 0 :(得分:1)

如果将类放在模块中,按照惯例,您应该在使用module_name命名的文件夹中定义它们。这就是整个组织的重点。你可以做这样的事情,并试一试。首先像这样整理你的代码和文件 - &gt;

models/
  zway/
    main.rb
  zway.rb

在你的main.rb中你可以像这样命名它 - &gt;

class Zway::Main
  ...
end

并在zway.rb中定义模块

module Zway
  ...
end

通过这种方式,当您尝试访问主类时,由于其命名空间,它将按照约定在文件夹zway内查找。并且所有模型都整齐地组织在各自的文件夹中。