人们为什么建议在Ruby on Rails中不对视图使用实例变量


Answers:


11

这个想法是在Rails最佳实践中提出的:用局部变量替换实例变量

基本上,如果您不使用很多局部变量或每个控制器方法只有一个单一视图,仅在视图中使用实例变量就不会造成任何麻烦。

但是,如果您使用许多局部变量,因此在控制器中声明了许多实例变量...,那么如果您使用将控制器(实例)变量显式传递给局部变量的替代方法,可能会减少混淆。这样,当在部分VIEW中工作时,您可以对要使用的变量/对象有一个明确的引用,该引用不与页面创建中包含的“所有”部分共享。

毕竟,您可以像处理它一样处理它,没有人会告诉您否则执行此操作。但是,我个人的观点是,我喜欢在局部/视图中明确引用不能与其他变量混淆的想法。


5

您可以从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

2
这是一个好点,我没有考虑变量的可变性。我假设控制器将变量“呈现”到视图中,但是如果实例变量被修改,则肯定会引入错误。
阿马拉2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.