Ruby on Rails中的实用程序类

goqiplq2  于 2023-04-11  发布在  Ruby
关注(0)|答案(5)|浏览(157)

这可能是一个愚蠢的问题,但我是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工作原理的误解。我能得到一些澄清吗?
把它作为一个类而不是一个模块放在库中会更好吗?我可以在库中添加子文件夹并自动加载它们吗?

jjhzyzn0

jjhzyzn01#

库或类

像这样的小工具类通常放在lib文件夹中,尽管有些人更喜欢创建一个名为classes的文件夹。无论您选择哪一个,请确保将文件夹导入config/application.rb,因为lib文件夹不是自动加载的:

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

关注点

如果你不想使用工具类,而是想用可重用的代码扩展一些模型,你可能还想看看新的Rails 4关注点文件夹,它鼓励你提取可重用的模块:
参见:How to use concerns in Rails 4

t30tvxxf

t30tvxxf2#

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

tcbh2hod

tcbh2hod3#

目前我还不能证实这一点,但是我相信你可以在lib目录中存储你的自定义模块和类。或者,你应该可以按照你在environment.rb中添加下面一行所指示的方式将它们存储在app目录中:

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

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

2vuwiymt

2vuwiymt4#

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

说明:
公认的答案建议将类添加到lib
根据this discussion
lib文件夹不属于Rails 3之后的自动加载路径。
所以不建议在autoload路径下添加lib。请使用app/lib

vzgqcmou

vzgqcmou5#

在RubyonRails应用程序中,“utils”和“helper”文件夹是组织应用程序中共享代码的两种不同方式。
“utils”文件夹通常包含可在应用程序的不同部分使用的独立方法或函数。这些方法通常是通用的,例如数据操作、字符串格式化或数学运算。“utils”文件夹不与应用程序的任何特定部分绑定,可由任何其他模块或组件使用。
另一方面,“helpers”文件夹通常包含用于提供特定于应用程序的特定部分(例如视图或控制器)的方法的模块。例如,视图helper可能提供用于格式化日期或生成链接的方法,而控制器helper可能提供用于处理身份验证或授权的方法。

相关问题