我有一个继承的 Rails 项目。我正在努力将它从 rails 2 升级到 rails 3。我现在在 3.0.15,正在努力升级到 3.2。在 app 目录中有一个包含类的支持文件夹。像这样:
app/
support/
sweeper.rb
grouped_list/
item.rb
list.rb
item.rb 看起来像这样:
class Support::GroupedList::Item
attr_accessor :name, :count, :link
def initialize(name, count, link)
@name = name
@count = count
@link = link
end
end
在其中一个控制器中,Items 类的调用如下:
Support::GroupedList::Item.new name, count, link
当我尝试加载页面时,出现错误:
uninitialized constant ApplicationController::Support
我的第一个想法是路径不在自动加载中,所以我添加了
config.autoload_paths += %W(#{config.root}/app/support #{config.root}/app/support/grouped_list)
在我的 application.rb 中,但这并没有改变任何东西。在四处寻找示例后,我发现人们在其目录结构中创建了空模块,因此我在 support 文件夹中创建了一个 support.rb 文件,如下所示:
module Support
end
现在我的错误变为
uninitialized constant Support::GroupedList
嘿!这很有趣,我不明白为什么它会改变,但它的进步对吗?所以我在 grouped_list 目录中添加了一个 grouped_list.rb 文件。它看起来像这样:
module Support::GroupedList
end
但后来我得到
Expected ***/app/support/grouped_list/grouped_list.rb to define GroupedList
啊! 所以我将其更改为:
module GroupedList
end
但后来我回到:
uninitialized constant Support::GroupedList
很明显,我缺少一些关于在模块中加载类的基本知识。这种结构在 rails 2 中工作,但在 rails 3.0.15 中中断。我真的很想了解,所以如果有人可以帮助我,我会非常感激。