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

11

Perché sento che non è bello condividere le variabili di istanza tra controller e viste. Mi piace perché vedo subito tramite @ che qualcosa proviene dal controller. Vedo un buon modo per utilizzare gli helper nei controller qui: link . Ma sto usando cancan per quella parte.

    
posta Amala 31.12.2011 - 16:55
fonte

2 risposte

10

L'idea è stata messa in pratica nelle best practice per i binari: Sostituisci la variabile di istanza con la variabile locale

Fondamentalmente se non usi molti partial o hai una singola vista per ciascun metodo di controller, solo usando le variabili di istanza nella vista non creeresti alcun problema.

Tuttavia, se si utilizzano molti partial e quindi sono dichiarate molte variabili di istanza nel controller ..., potrebbe essere meno confuso se si utilizza l'alternativa di passare il controller (istanza) -variabile alle partials 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 i partial "tutti" inclusi nella creazione della pagina.

Dopo tutto, puoi gestirlo come vuoi per gestirlo, nessuno ti dirà di farlo altrimenti. La mia opinione personale, tuttavia, è che mi piace l'idea di avere riferimenti espliciti nei miei partial / views che non possono essere confusi con altre variabili.

    
risposta data 04.01.2012 - 09:29
fonte
5

Puoi ottenere l'analogia da global variabili o variabili passate per riferimento, e pensare alle 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 volere un simile comportamento, ma nella maggior parte dei casi non ne avresti bisogno. Ed è più facile introdurre bug in questo modo e più difficile rintracciarli. Ecco perché è consigliato, 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
    
risposta data 13.11.2015 - 02:50
fonte

Leggi altre domande sui tag