我意识到“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自动加载此模块?
答案 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"