Rails上的实用类

问题描述 投票:14回答:4

这可能是一个愚蠢的问题,但我是Ruby on Rails的新手,我需要一点指导。 我想有一个helperutility类来执行一组网络操作并返回结果。 我应该把这个类放在哪里,如何使用它。

我已经在我的appmodulenamehelpers目录下创建了network_helper.rb。 在我的控制器中,当我尝试做

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

我得到一个错误

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

我相信这只是对ruby on rails工作原理的误解。 我可以得到一些澄清吗?

把它做成一个类而不是一个模块,然后放在libs中会不会更好? 我可以在libs中添加子文件夹并自动加载它们吗?

ruby ruby-on-rails-3
4个回答
3
投票

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


7
投票

Lib或Classes

像这样的小工具类通常放在lib文件夹中,尽管有些人喜欢创建一个名为classes的文件夹。无论你选择哪种方式,请确保你在configapplication.rb中导入该文件夹,因为lib文件夹不会自动加载。

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

关注

如果你想用可重用的代码来扩展你的一些模型,而不是一个实用类,你也可以看看新的Rails 4关注文件夹,它鼓励你提取可重用的模块。

参见: 如何在 Rails 4 中使用 concerns


1
投票

我现在还不能证实这一点,但是我相信你可以存储你的自定义模块和类的一个地方是在 lib 目录中。或者,你应该能够将它们存储在 app 目录中添加以下一行到环境.rb中。

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

另外,检查一下 Yehuda Katz的回答我认为这不仅更好地回答了你的问题,而且还包含了一些与你的情况有关的非常有趣和有用的信息和概念。希望能帮到你


0
投票

将您的班级添加到 app/lib 文件夹而不是 lib,这样就不会改变自动加载路径了!

解释。

被接受的答案是将类添加到 lib.

但根据... 本次讨论:

自Rails 3以来,lib文件夹不属于自动加载路径。

所以不鼓励添加 lib 在自动加载路径下。使用 app/lib 而不是。

© www.soinside.com 2019 - 2024. All rights reserved.