繁体   English   中英

如何使用Rails将实例变量DRY保留在控制器帮助器中?

[英]How can I keep an instance variable DRY in a controller helper with Rails?

我正在编写此小部件,该小部件将包含在网站的单个页面中,因此我看不到有理由在ApplicationController中声明我在做什么。 但是,这个新的窗口小部件确实具有相当大的复杂性,因此我想将其与通常处理此页面的控制器分开,因为该控制器已经具有相当的复杂性。 我最初在设计中想到,我可以为控制器创建一个帮助器模块,并将大多数小部件逻辑保留在那里。

我正在尝试编写此帮助程序模块,但是后来我意识到需要从一个位置初始化一个特定的数组,但是需要多个方法来访问它,并且需要确保在任何其他操作之前都对其进行了初始化。其他方法对此数组进行调用。 在这样的模块中,是否可以做一些类似于before_filter的事情,在此模块中,我可以确保在使用之前初始化此变量,或者有更好的整体方法来实现此目标,即“ Rails方式”?

我认为您可以创建一个新类并在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约定好。

您可能需要一位优秀的主持人。 ruby工具箱中查找它。

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

窗帘教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM