为什么Rails 3.2.9不能在“lib”目录中自动要求* .rb文件?

时间:2012-12-31 16:31:33

标签: ruby-on-rails-3 ruby-on-rails-3.2

我意识到“lib”默认不再自动加载。但是,我在application.rb文件中有这个:

config.autoload_paths += %W(#{config.root}/lib #{config.root}/app/datatables)

我在lib中有一个名为utility.rb的模块,声明如下:

module MyApp
  module Utility

我有一些实用工具方法,例如一个接受数组并将其转换为可以从MySQL查询的值的方法。我有:

include MyApp

在需要该方法的类的顶部,以便我可以调用:

Utility::array_to_query_string

不幸的是,这不起作用。无论是运行rake任务还是应用程序,我都会遇到:

uninitialized constant MyApp

除了上面的内容之外,我不知道如何制作Rails require。在控制台中,如果我显式键入require 'utility'然后我可以成功执行包含。如何让Rails自动加载此模块?

2 个答案:

答案 0 :(得分:2)

问题可能是lib文件夹中的目录结构。 rails自动加载器可以找到您的文件,它需要放在正确的位置。您的MyApp::Utility模块应位于名为lib/my_app/utility.rb的文件中。

如果您将文件直接放在lib lib/utility.rb中,自动加载器将无法找到它。

答案 1 :(得分:0)

在我的一些应用中,我添加了一个加载自定义代码的初始化程序。

在config / initializers / utility.rb中,

require "#{Rails.root}/lib/utility"