跨多个控制器的小部件数据

时间:2020-03-06 14:37:55  来源:igfitidea点击:

假设我有一个小部件,可显示有关我在一个站点上有多少帖子或者评论的摘要信息。

在各个控制器之间保留此信息的最干净的方法是什么?

在应用程序控制器中包含实例变量似乎是个坏主意。拥有一个为每个控制器加载数据的前置过滤器的味道就像代码重复一样。

我是否必须使用诸如Cells插件(http://cells.rubyforge.org/)之类的插件,还是有一种更简单的方法?

解决方案

大概,我们只有一个显示此信息的局部文件。我们可以将获取所需数据的方法放在ApplicationHelper中,或者将其作为类方法放置在要从中获取数据的任何模型上。然后在需要显示时在局部中调用该方法。

我最后做了类似的事情:

在controllers / application.rb中

def load_sidebar
  @posts = Post.find(:all)
end

为了将边栏包含在各种操作中,我这样做:

before_filter :load_sidebar, :only => [ :index ] #load from application.rb file

我将侧边栏变成了共享的部分。

def load_sidebar
  @posts = Post.find(:all)
end

我们提到我们正在显示摘要信息。如果我们真的不想将所有帖子加载到内存中,则可以执行以下操作。

def load_sidebar
  @post_count = Post.count(:id)
end