Ruby on rails 非ActiveRecord模型的Rails加载
我有一个Rails 3应用程序,它定义了一些非ActiveRecord模型。所有这些都在Ruby on rails 非ActiveRecord模型的Rails加载,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个Rails 3应用程序,它定义了一些非ActiveRecord模型。所有这些都在app/models/module\u name中定义。我在所有自动加载路径中都有以下内容: [4] pry(main)> app._all_autoload_paths => ["/Users/mandar/myapp/lib", "/Users/mandar/myapp/app/assets", "/Users/mandar/myapp/app/controllers", "/Users
app/models/module\u name
中定义。我在所有自动加载路径中都有以下内容:
[4] pry(main)> app._all_autoload_paths
=> ["/Users/mandar/myapp/lib",
"/Users/mandar/myapp/app/assets",
"/Users/mandar/myapp/app/controllers",
"/Users/mandar/myapp/app/helpers",
"/Users/mandar/myapp/app/models"]
加载模型时,以下两个类定义的处理方式是否存在差异
模块A
X类
#一些代码
结束
结束
及
A类::Y类
#一些代码
结束
我问这个问题的原因是有时我看到一个未初始化的常量a::Y-NameError
错误
更新:在Sibevin的回答之后,我想更清楚地说明这一点。目前,我有以下文件结构:
app
- models
- a
- x.rb
- y.rb
我看到了Y的错误,它使用了ModuleName::ClassName
语法,但几乎没有看到X的错误
谢谢你的帮助 它们应该没有区别,但我通常会将它们分成单独的文件 您可以先创建一个文件夹
app/models/a/
,然后将您的class a::X
放入app/models/a/X.rb
类似地,app/models/a/y.rb
用于class a::y
顺便说一句,app/models/a.rb
用于您的模块a
(如果需要)
更新:
实际上,我从未使用第二种格式在模块中声明类。也许以下医生可以回答您的问题:
如果您在重新打开模块时试图走捷径,那么您
可能已经注意到跳过的名称空间中的常量不是
可用。这是因为外部名称空间没有添加到
模块。嵌套
这就是我目前的文件结构。抱歉说得不准确。我将相应地更新问题。