我有一个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吗?
谢谢!
答案 0 :(得分:1)
我的建议是避免依赖helper和partials中的实例变量。
这使得它们不那么直观,而且难以维护和测试。
你不应该为干燥交换清晰度,所以继续使用局部变量。
答案 1 :(得分:1)
我认为这是实例变量正常的时候之一。侧栏在哪里生活?我怀疑没有特定于它的模型或控制器,因此这部分存在于应用程序视图文件夹中(或者在另一个控制器的视图中是自由的)。我将所有这些部分放在他们自己的文件夹中... views / global或者其他东西,这有助于表明他们在实例变量中有独特的需求。