Rails部分:通过封装访问数据:本地或全局状态(@attributes)?

时间:2011-07-25 08:40:04

标签: ruby-on-rails model-view-controller partial-views

我有一个rails部分为用户呈现侧边栏。作为此部分的一部分,呈现另一个部分,其显示用户的组,以及从相应组的关联模型计算的分数。因此,我有以下结构:

- view
   -> renders sidebar
       -> renders group_table

侧边栏部分包含在许多视图中(例如,显示,编辑,自定义操作),我的控制器中有一个before_filter,用于设置需要传递给视图的属性的所有操作,例如。

@groups = @user.groups
@group_ranking = [method with heavy calculations] # access via @group_ranking[group]

保持上面的结构和保持封装的,自包含的部分没有全局状态,我必须通过侧边栏部分将@group_rankings传递给group_table部分(它没有做任何事情而不是传递它。由于侧边栏还包含需要不同数据的其他部分,这非常难看(此外,我在视图中渲染侧边栏时会重复代码,总是将相同的@变量传递给它)。

所以最后一个问题是:执行封装视图是否可以接受,是否有更好的方法可以实现,或者可以直接访问部分视图中的@variables吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我的建议是避免依赖helper和partials中的实例变量。

这使得它们不那么直观,而且难以维护和测试。

你不应该为干燥交换清晰度,所以继续使用局部变量。

答案 1 :(得分:1)

我认为这是实例变量正常的时候之一。侧栏在哪里生活?我怀疑没有特定于它的模型或控制器,因此这部分存在于应用程序视图文件夹中(或者在另一个控制器的视图中是自由的)。我将所有这些部分放在他们自己的文件夹中... views / global或者其他东西,这有助于表明他们在实例变量中有独特的需求。