文件中的类添加到未加载的预加载路径中

时间:2015-04-13 18:25:33

标签: ruby-on-rails ruby

我创建了文件夹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,无论是在控制台中还是在调用该类的页面上进行尝试。

1 个答案:

答案 0 :(得分:0)

根据您的要求:在Rails文件命名非常重要,如果您有类RedcarpetHeaderDowngrade这样的类,则rails将查找名为redcarpet_header_downgrade.rb的文件来定义此类。

如果您尝试使用错误的文件名调用此类,则会出现类似于Uninitialized Constant ... expected ... to define it的错误。这是因为Rails期望类名也将文件指定为类名的基于snake_cased的版本,这意味着您将大写字母替换为下层版本并添加前面的下划线。因此redcarpet_header_downgrade.rb

如果你是猴子修补课程,我会建议将其添加到config/initializers并单独留下负载路径。这样,类或补丁会自动加载应用程序本身。将添加内容添加到加载路径中,以便完整的类和功能无法由已加载的类处理。