在我的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
我在网上搜索了如何使用模块,但我发现的主要是多重继承和命名空间。但不是关于使用模块来组织代码的实践。
答案 0 :(得分:1)
如果将类放在模块中,按照惯例,您应该在使用module_name命名的文件夹中定义它们。这就是整个组织的重点。你可以做这样的事情,并试一试。首先像这样整理你的代码和文件 - &gt;
models/
zway/
main.rb
zway.rb
在你的main.rb中你可以像这样命名它 - &gt;
class Zway::Main
...
end
并在zway.rb中定义模块
module Zway
...
end
通过这种方式,当您尝试访问主类时,由于其命名空间,它将按照约定在文件夹zway
内查找。并且所有模型都整齐地组织在各自的文件夹中。