0

我意识到默认情况下不再自动加载“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

require除了我上面的之外,我不知道如何制作 Rails 。在控制台中,如果我明确键入require 'utility',然后我可以成功地执行包含。我该怎么做才能让 Rails 自动加载这个模块?

4

2 回答 2

2

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

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

于 2012-12-31T16:35:20.440 回答
0

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

在 config/initializers/utility.rb 中,

require "#{Rails.root}/lib/utility"
于 2012-12-31T16:41:07.530 回答