¿Por qué la gente sugiere no usar la variable de instancia para las vistas en Ruby on Rails?

Respuestas:

11

La idea se presentó en las mejores prácticas de rails: reemplazar la variable de instancia con la variable local

Básicamente, si no usa muchos parciales o tiene una vista simple para cada método de controlador, solo usar las variables de instancia en la vista realmente no causaría ningún problema.

Sin embargo, si usa muchos parciales y, por lo tanto, tiene muchas variables de instancia declaradas en su controlador ..., podría ser menos confuso si usa la alternativa de pasar explícitamente la variable controlador (instancia) a los parciales. De esa manera, mientras trabaja en la VISTA parcial, tiene una referencia explícita a la variable / objeto con la que desea trabajar que no se comparte con 'todos' los parciales que se incluyen en la creación de la página.

Después de todo, puede manejar esto tal como lo desea, nadie le dirá que lo haga de otra manera. Mi opinión personal, sin embargo, es que me gusta la idea de tener referencias explícitas en mis parciales / vistas que no pueden confundirse con otras variables.

Ingo
fuente
5

Puede obtener la analogía de globalvariables o variables pasadas por referencia, y pensar en los parciales como funciones. Por lo tanto, el uso de la variable de instancia es muy similar a la variable pasada para funcionar como referencia con todos sus pro y contra:

# controller 
def index
  @var = 1
end

#view index.html.erb 
<%= @var %><br/>
<%= render 'foo' %><br/>
<%= @var %>

#partial _foo.html.erb
<%= @var = 2 %>

el resultado será

1
2
2

Es posible que desee tal comportamiento, pero en la mayoría de los casos no lo necesitaría. Y es más fácil introducir errores de esta manera y es más difícil rastrearlos. Por eso se recomienda, porque separa los ámbitos de las variables utilizadas en las vistas y parciales:

#view index.html.erb 
<%= @var %><br/>
<%= render 'foo', var: @var %><br/>
<%= @var %>

#partial _foo.html.erb
<%= var = 2 %>

resultado:

1
2
1
Grzegorz
fuente
2
Este es un buen punto, no pensé en la mutabilidad de las variables. Supuse que el controlador "presentaba" las variables a las vistas, pero las variables de instancia definitivamente pueden introducir errores si se modifican.
Amala