Ruby on Rails中的实用程序类

时间:2013-03-10 03:40:48

标签: ruby ruby-on-rails-3

这可能是一个愚蠢的问题,但我是Ruby on Rails的新手,我可以使用一些指导。我想有一个帮助器/实用程序类,它执行一组网络操作并返回结果。我在哪里放这个课程,我该如何使用它。

我在app / modulename / helpers目录中创建了network_helper.rb。在我尝试做的时候在我的控制器中

  myNetworkHelper = ModuleName::NetworkHelper.new
  results = myNetworkHelper.getResults

我收到错误

 undefined method `new' for MyModule::NetworkHelper:Module

我确信这只是对铁轨上红宝石如何工作的误解。我能澄清一下吗?

将它作为一个类而不是模块并将其放入库中会更好吗?我可以在库中添加子文件夹并让它们自动加载吗?

4 个答案:

答案 0 :(得分:6)

Lib或Classes

像这样的小实用程序类通常会进入lib文件夹,但有些人更喜欢创建一个名为classes的文件夹。无论您选择哪个,请确保在config / application.rb中导入该文件夹,因为lib文件夹未自动加载:

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

关注

如果您希望使用可重用代码扩展某些模型而不是实用程序类,您可能还希望查看新的Rails 4关注文件夹,以鼓励您提取可重用模块:

请参阅:How to use concerns in Rails 4

答案 1 :(得分:3)

要使用new,你调用它的东西必须是一个类,而不是一个模块。你正在使用一个模块。在module中将class更改为lib/utilities/network_utility.rb

答案 2 :(得分:1)

我目前无法验证这一点,但我相信您可以存储自定义模块和类的一个位置是lib目录。或者,您应该能够以您指定的方式将它们存储在app目录中,方法是将以下行添加到您的environment.rb中:

config.load_paths << File.join(Rails.root, "app", "modulename")

另外,请查看Yehuda Katz's answer,我认为这不仅可以更好地回答您的问题,还会包含一些与您的情况相关的非常有趣且有用的信息和概念。希望有所帮助!

答案 3 :(得分:0)

将类添加到app/lib文件夹中,而不要添加到lib文件夹中,以免更改自动加载路径!

说明:

可接受的答案建议将类添加到lib中。

但是根据this discussion

从Rails 3开始,lib文件夹不属于自动加载路径。

因此不建议在自动加载路径下添加lib。请改用app/lib