[英]Rails: Unable to include module in Class
我已经在我的应用文件夹中的文件中直接定义了一个模块,但是无法在ActiveRecord类中使用其方法(无法识别方法)。 据我了解,应用文件夹中的文件应该是Rails自动需要的。
我也尝试过手动添加它:
class Picture < ActiveRecord::Base
include Curation
...
end
但我明白了
NameError: uninitialized constant Picture::Curation
我是否对此感到误解,实际上确实需要手动要求所有新文件?
Rails不需要在开发模式下来自应用程序的所有文件。 相反,当您引用未定义的常量时,它将按需加载文件。 然后,它从类或模块的名称中猜测文件名。 在您的情况下,您在gallery_curation
文件中定义了一个Curation
模块。 当Rails注意到未定义的Curation
模块时,它将在app
所有子目录中查找curation.rb
文件。 显然找不到该文件,因此是一个例外。
您有3种选择:
curation
或将模块重命名为GalleryCuration
Curation
某个位置设置Curation
的自动加载路径。 为了您的理智,建议您遵循约定。
有关Rails自动加载的更多信息,请访问: http : //guides.rubyonrails.org/autoloading_and_reloading_constants.html
Rails不会从app
目录本身自动加载。 如果仅是模型中使用的模块,则可以将其放在app/models
目录中(没关系,它实际上不是模型)。 另外,如果将它用于不同类型的类中,则最好将其放在lib
。
此外,仅当rails可以正确猜测常量(在此情况下为模块)将包含在其中的文件名时,rails自动加载才有效。
这意味着您需要调用curation.rb
文件以使Rails从中自动加载Curation
模块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.