1

我有一个继承的 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 中中断。我真的很想了解,所以如果有人可以帮助我,我会非常感激。

4

1 回答 1

1
class GroupedList::Item

  attr_accessor :name, :count, :link

  def initialize(name, count, link)
    @name = name
    @count = count
    @link = link
  end
end

这应该有效。然后在你的控制器中:

GroupedList::Item.new name, count, link

还记得在进行这些更改后重新启动您的 Rails 服务器/控制台。

于 2012-06-28T12:59:34.617 回答