繁体   English   中英

Rails:无法在类中包含模块

[英]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种选择:

  1. 遵循Rails的约定,将文件重命名为curation或将模块重命名为GalleryCuration
  2. 使用自定义的require_dependency
  3. 在初始值设定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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM