为什么我听到在控制器和视图之间共享实例变量不好。我有点喜欢它,因为我可以立即通过@看到某些东西来自控制器。我在这里看到了一种在控制器中使用助手的好方法:http : //www.stephencelis.com/2008/09/06/rails-controllers-views-and-variables.html。但是我在这部分使用康康。
为什么我听到在控制器和视图之间共享实例变量不好。我有点喜欢它,因为我可以立即通过@看到某些东西来自控制器。我在这里看到了一种在控制器中使用助手的好方法:http : //www.stephencelis.com/2008/09/06/rails-controllers-views-and-variables.html。但是我在这部分使用康康。
Answers:
这个想法是在Rails最佳实践中提出的:用局部变量替换实例变量
基本上,如果您不使用很多局部变量或每个控制器方法只有一个单一视图,仅在视图中使用实例变量就不会造成任何麻烦。
但是,如果您使用许多局部变量,因此在控制器中声明了许多实例变量...,那么如果您使用将控制器(实例)变量显式传递给局部变量的替代方法,可能会减少混淆。这样,当在部分VIEW中工作时,您可以对要使用的变量/对象有一个明确的引用,该引用不与页面创建中包含的“所有”部分共享。
毕竟,您可以像处理它一样处理它,没有人会告诉您否则执行此操作。但是,我个人的观点是,我喜欢在局部/视图中明确引用不能与其他变量混淆的想法。
您可以从global
变量或通过引用传递的变量中获得类比,并将部分函数视为函数。因此,使用实例变量非常类似于传递给函数的变量,以作为其优点和缺点的参考:
# controller
def index
@var = 1
end
#view index.html.erb
<%= @var %><br/>
<%= render 'foo' %><br/>
<%= @var %>
#partial _foo.html.erb
<%= @var = 2 %>
结果将是
1
2
2
您可能想要这种行为,但是在大多数情况下,您将不需要它。而且以这种方式引入错误更容易,并且更难以跟踪它们。这就是为什么推荐这样做的原因,因为它分隔了视图和局部视图中使用的变量的范围:
#view index.html.erb
<%= @var %><br/>
<%= render 'foo', var: @var %><br/>
<%= @var %>
#partial _foo.html.erb
<%= var = 2 %>
结果:
1
2
1