我正在编写此小部件,该小部件将包含在网站的单个页面中,因此我没有理由在ApplicationController中声明我正在做什么。但是,这个新的小部件确实具有相当大的复杂性,所以我想将它与通常处理该页面的控制器分开,因为该控制器已经具有相当复杂的性能。我最初在我的设计中想到我可以为控制器创建一个辅助模块,并保留大部分的小部件逻辑。
我正在尝试编写这个帮助器模块,但后来我意识到我需要能够从一个位置初始化一个特定的数组,但是多个方法需要访问它并且需要保证它是在任何其他方法调用此数组之前初始化。有没有办法在这样一个模块中做一个类似于before_filter的东西,我可以确保在使用之前初始化这个变量,或者有更好的整体方法来接近这个“Rails方式”?
答案 0 :(得分:1)
我认为你可以创建一个新类并在before_filter或你的控制器中实例化它。 不确定你想要实现什么,但一个例子可能是:
class MyArrayBuilder
def initialize(some, param)
#something
end
def get_array
return my_array
end
end
class SomethingsController < ApplicationController
before_filter :build_array
def build_array
@array = MyArrayBuilder.new(some, param).get_array
end
end
然后将@array
变量传递给助手。
我不确定是否有一种“Rails方式”可以做你想要的东西:Rails作为很多惯例但是当你开始关心设计和DRY时,我相信最好从好的角度思考面向对象编程的实践比Rails惯例。
答案 1 :(得分:0)
您可能需要一位优秀的演示者。在ruby toolbox中查找。
演示者是控制器和视图之间的中间地带。它可以访问数据,处理与表示有关的复杂逻辑,而不是数据操作。它可以做很多干净简单的事情。检查出来,也许这对你的问题有好处。