这可能是一个愚蠢的问题,但我是Ruby on Rails的新手,我需要一些指导。我想有一个helper/utility类,它执行一组网络操作并返回结果。我应该把这个类放在哪里,以及如何使用它。
我已经在app/modulename/helpers目录中创建了network_helper.rb。
myNetworkHelper = ModuleName::NetworkHelper.new
results = myNetworkHelper.getResults
我得到一个错误
undefined method `new' for MyModule::NetworkHelper:Module
我确信这只是对ruby on rails工作原理的误解。我能得到一些澄清吗?
把它作为一个类而不是一个模块放在库中会更好吗?我可以在库中添加子文件夹并自动加载它们吗?
5条答案
按热度按时间jjhzyzn01#
库或类
像这样的小工具类通常放在lib文件夹中,尽管有些人更喜欢创建一个名为classes的文件夹。无论您选择哪一个,请确保将文件夹导入config/application.rb,因为lib文件夹不是自动加载的:
关注点
如果你不想使用工具类,而是想用可重用的代码扩展一些模型,你可能还想看看新的Rails 4关注点文件夹,它鼓励你提取可重用的模块:
参见:How to use concerns in Rails 4
t30tvxxf2#
要使用
new
,你调用它的对象必须是一个类,而不是一个模块。你正在使用一个模块。在lib/utilities/network_utility.rb
中将module
更改为class
。tcbh2hod3#
目前我还不能证实这一点,但是我相信你可以在
lib
目录中存储你的自定义模块和类。或者,你应该可以按照你在environment.rb中添加下面一行所指示的方式将它们存储在app
目录中:另外,请查看Yehuda Katz's answer,我认为它不仅更好地回答了您的问题,而且还包含了一些与您的情况相关的非常有趣和有用的信息和概念。希望对您有所帮助!
2vuwiymt4#
将你的类添加到
app/lib
文件夹,而不是lib
文件夹,这样你就不会改变自动加载路径!说明:
公认的答案建议将类添加到
lib
。根据this discussion:
lib文件夹不属于Rails 3之后的自动加载路径。
所以不建议在autoload路径下添加
lib
。请使用app/lib
。vzgqcmou5#
在RubyonRails应用程序中,“utils”和“helper”文件夹是组织应用程序中共享代码的两种不同方式。
“utils”文件夹通常包含可在应用程序的不同部分使用的独立方法或函数。这些方法通常是通用的,例如数据操作、字符串格式化或数学运算。“utils”文件夹不与应用程序的任何特定部分绑定,可由任何其他模块或组件使用。
另一方面,“helpers”文件夹通常包含用于提供特定于应用程序的特定部分(例如视图或控制器)的方法的模块。例如,视图helper可能提供用于格式化日期或生成链接的方法,而控制器helper可能提供用于处理身份验证或授权的方法。