Por que as pessoas sugerem não usar variável de instância para visualizações no Ruby on Rails

Respostas:

11

A ideia foi colocada nas práticas recomendadas do Rails: Substitua a variável de instância pela variável local

Basicamente, se você não usar muitas parciais ou tiver uma única visualização simples para cada método do controlador, o simples uso das variáveis ​​de instância na visualização não causaria nenhum problema.

No entanto, se você usar muitas parciais e, portanto, tiver muitas variáveis ​​de instância declaradas no seu controlador ..., poderá ser menos confuso se você usar a alternativa de passar explicitamente a variável do controlador (instância) para as parciais. Dessa forma - enquanto trabalha na VIEW parcial - você tem uma referência explícita à variável / objeto com o qual deseja trabalhar, que não é compartilhada com 'todas' parciais incluídas na criação da página.

Afinal, você pode lidar com isso da maneira que quiser, ninguém lhe dirá para fazer o contrário. Minha opinião pessoal, no entanto, é que eu gosto da idéia de ter referências explícitas em minhas parciais / visões que não podem ser confundidas com outras variáveis.

Ingo
fonte
5

Você pode obter a analogia de globalvariáveis ​​ou variáveis ​​passadas por referência e pensar em parciais como funções. Portanto, o uso da variável de instância é muito parecido com a variável passada para funcionar como referência com todos os seus prós e contras:

# controller 
def index
  @var = 1
end

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

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

resultado será

1
2
2

Você pode querer esse comportamento, mas na maioria dos casos não precisaria. E é mais fácil introduzir bugs dessa maneira e mais difícil rastreá-los. É por isso que isso é recomendado, porque separa os escopos das variáveis ​​usadas em visualizações e parciais:

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

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

resultado:

1
2
1
Grzegorz
fonte
2
Este é um bom ponto, não pensei na mutabilidade das variáveis. Eu tinha a suposição de que o controlador "apresentava" as variáveis ​​nas visualizações, mas as variáveis ​​de instância podem definitivamente introduzir erros se forem modificadas.
Amala