我创建了文件夹app/classes
,并将文件RedcarpetHeaderDowngrade.rb添加到该文件夹中。它包含以下类:
class RedcarpetHeaderDowngrade < Redcarpet::Render::HTML
def header(text, level)
level += 1
"<h#{level}>#{text}</h#{level}>"
end
end
在config.application.rb
中,我在Application
类中添加了以下行:
config.eager_load_paths += %W( #{config.root}/app/classes )
我希望这会生成RedcarpetHeaderDowngrade.rb
文件,从而使我的应用程序中的类RedcarpetHeaderDowngrade
可用。实际上,这与我在models目录中创建的子文件夹一起使用,并以完全相同的方式添加到急切的加载路径中。但是,类RedcarpetHeaderDowngrade
未加载。我不断收到错误uninitialized constant RedcarpetHeaderDowngrade
,无论是在控制台中还是在调用该类的页面上进行尝试。
答案 0 :(得分:0)
根据您的要求:在Rails
文件命名非常重要,如果您有类RedcarpetHeaderDowngrade
这样的类,则rails将查找名为redcarpet_header_downgrade.rb
的文件来定义此类。
如果您尝试使用错误的文件名调用此类,则会出现类似于Uninitialized Constant ... expected ... to define it
的错误。这是因为Rails
期望类名也将文件指定为类名的基于snake_cased的版本,这意味着您将大写字母替换为下层版本并添加前面的下划线。因此redcarpet_header_downgrade.rb
。
如果你是猴子修补课程,我会建议将其添加到config/initializers
并单独留下负载路径。这样,类或补丁会自动加载应用程序本身。将添加内容添加到加载路径中,以便完整的类和功能无法由已加载的类处理。