Perché le persone suggeriscono di non utilizzare la variabile di istanza per le visualizzazioni in Ruby on Rails


Risposte:


11

L'idea è stata sviluppata nelle best practice delle rotaie: sostituire la variabile di istanza con la variabile locale

Fondamentalmente se non usi molti parziali o non hai una vista semplice per ogni metodo del controller, usare semplicemente le variabili di istanza nella vista non causerebbe davvero alcun problema.

Tuttavia, se usi molti parziali e quindi hai molte variabili di istanza dichiarate nel tuo controller ..., potrebbe essere meno confuso se usi l'alternativa di passare il controller (istanza) variabile ai parziali in modo esplicito. In questo modo - mentre lavori nella VISTA parziale - hai un riferimento esplicito alla variabile / oggetto con cui vuoi lavorare che non è condiviso con 'tutti' i parziali inclusi nella creazione della pagina.

Dopotutto, puoi gestirlo proprio come ti piace gestirlo, nessuno ti dirà di farlo diversamente. La mia opinione personale, tuttavia, è che mi piace l'idea di avere esplicitamente riferimenti nei miei parziali / punti di vista che non possono essere confusi con altre variabili.


5

È possibile ottenere l'analogia da globalvariabili o variabili passate per riferimento e pensare ai parziali come funzioni. Quindi usare la variabile di istanza è praticamente come la variabile passata a funzionare come riferimento con tutti i suoi pro e contro:

# controller 
def index
  @var = 1
end

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

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

il risultato sarà

1
2
2

Potresti desiderare un simile comportamento, ma nella maggior parte dei casi non ne avresti bisogno. Ed è più facile introdurre i bug in questo modo e più difficile rintracciarli. Ecco perché questo è raccomandato, perché separa gli ambiti delle variabili utilizzate nelle viste e nei parziali:

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

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

risultato:

1
2
1

2
Questo è un buon punto, non ho pensato alla mutabilità delle variabili. Ho ipotizzato che il controller "presentasse" le variabili alle viste, ma le variabili di istanza possono sicuramente introdurre dei bug se vengono modificate.
Amala,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.