这可能是一个愚蠢的问题,但我是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中添加子文件夹并自动加载它们吗?
要使用 new
你调用它的东西必须是一个类,而不是一个模块。你使用的是一个模块。改变 module
到 class
在 lib/utilities/network_utility.rb
.
像这样的小工具类通常放在lib文件夹中,尽管有些人喜欢创建一个名为classes的文件夹。无论你选择哪种方式,请确保你在configapplication.rb中导入该文件夹,因为lib文件夹不会自动加载。
config.autoload_paths += %W(#{config.root}/lib)
如果你想用可重用的代码来扩展你的一些模型,而不是一个实用类,你也可以看看新的Rails 4关注文件夹,它鼓励你提取可重用的模块。
我现在还不能证实这一点,但是我相信你可以存储你的自定义模块和类的一个地方是在 lib
目录中。或者,你应该能够将它们存储在 app
目录中添加以下一行到环境.rb中。
config.load_paths << File.join(Rails.root, "app", "modulename")
另外,检查一下 Yehuda Katz的回答我认为这不仅更好地回答了你的问题,而且还包含了一些与你的情况有关的非常有趣和有用的信息和概念。希望能帮到你
将您的班级添加到 app/lib
文件夹而不是 lib
,这样就不会改变自动加载路径了!
解释。
被接受的答案是将类添加到 lib
.
但根据... 本次讨论:
自Rails 3以来,lib文件夹不属于自动加载路径。
所以不鼓励添加 lib
在自动加载路径下。使用 app/lib
而不是。