当我的项目成长时,我需要编写一些方法,但是application_controller的私有方法和帮助程序没有提供足够的空间来存储所有扩展。
所以我查看了自定义类和方法,它们存储在/ lib文件夹中。
但我还有一些问题,我无法解决:
- 我什么时候应该使用“class<< self”?我有一个类,用于计算两个数字数组之间的差异,然后返回具有该数字的中间值的新数组。我以前用过这样的代码:
x = MyClass.new
x.calculate(array1, array2)
然后我将我的类'方法放入“class<< self; end”以使用没有初始化的类。这是正确的解决方案吗?
- 我应该何时使用自定义模块?是否总是需要“包含”或“要求”它们?请告诉我您项目中的模块,何时使用它们?
- 如何在控制器中调用helper的方法?我想在ajax响应中使用。例如,我使用帮助方法'users_for_output',如果有ajax调用,我的应用程序应该只将用户呈现为文本,然后用javascript处理它。
答案 0 :(得分:1)
1)您不必实例化类来调用静态方法,即
MyUtil.do_something
Vs以上。
MyUtil.new.do_something
在我的项目中,我将这些方法保持静态。
2)当想要跨类共享一组功能时,您可以使用模块。阅读this mixin vs继承讨论。您将对何时使用模块有个好主意。
2.1)included
方法用于初始化模块变量。如果您没有进行任何初始化,则无需使用它。
3)如果要将控制器方法公开为辅助方法,请使用ApplicationController类中的helper_method
调用。
class ApplicationController < ActionController::Base
helper_method :user_for_output
end