Ruby on Rails中的实用程序类

smo*_*ter 14 ruby ruby-on-rails-3

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

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

  myNetworkHelper = ModuleName::NetworkHelper.new
  results = myNetworkHelper.getResults
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

 undefined method `new' for MyModule::NetworkHelper:Module
Run Code Online (Sandbox Code Playgroud)

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

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

sup*_*ary 6

Lib或Classes

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

config.autoload_paths += %W(#{config.root}/lib)
Run Code Online (Sandbox Code Playgroud)

关注

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

请参阅:如何在Rails 4中使用问题


Lin*_*ios 4

要使用new,您调用它的东西必须是一个类,而不是一个模块。您正在使用一个模块。更改moduleclasslib/utilities/network_utility.rb.

  • @btate:使用“require_relative”。如果您的主文件位于“bin/main.rb”(无论什么),请使用“require_relative '../lib/utilities/network_utility.rb'”。 (2认同)