0

我正在编写这个将包含在站点的单个页面中的小部件,所以我看不到有理由声明我在 ApplicationController 中所做的事情。然而,这个新的小部件确实有相当多的复杂性,所以我想把它与通常处理这个页面的控制器分开,因为那个控制器已经有相当多的复杂性了。我最初认为在我的设计中,我可以为控制器制作一个辅助模块,并将大部分小部件逻辑保留在那里。

我正在尝试编写此帮助程序模块,但后来我意识到我需要能够从单个位置初始化一个特定的数组,但是需要多个方法来访问它,并且需要确保它在任何之前被初始化其他方法调用此数组。有没有办法在这样的模块中做类似于 before_filter 的事情,我可以确保在使用之前初始化这个变量,或者有没有更好的整体方法来接近这个,那就是“Rails 方式”?

4

2 回答 2

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 时,我相信最好从 Oriented 的良好实践方面考虑对象编程比 Rails 约定。

于 2012-11-09T21:58:47.740 回答
0

你可能需要一个好的主持人。在ruby​​ 工具箱中寻找它。

演示者是控制器和视图之间的中间地带。它可以访问数据,并处理与表示相关的复杂逻辑,而不是数据操作。它可以做很多干净简单的事情。看看吧,也许它对你的问题有好处。

布草教程

于 2012-11-09T22:03:27.187 回答