# Variabile istanza e redirect\_to

**URL:** <https://www.ruby-forum.com/t/variabile-istanza-e-redirect-to/70652>\
**Category:** IT\
**Created:** [October 1, 2006, 3:07pm UTC](https://www.ruby-forum.com/t/variabile-istanza-e-redirect-to/70652 "2006-10-01T15:07:30Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![BSMaffettone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e68b1a/32.png) [@BSMaffettone](https://www.ruby-forum.com/u/BSMaffettone)\
**Post date:** [October 1, 2006, 3:07pm UTC](https://www.ruby-forum.com/t/variabile-istanza-e-redirect-to/70652/1 "2006-10-01T15:07:30Z")

</div>

In una classe controller ho:

1 def list  
2 puts @nome # restituisce nil \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
3 …  
4 …  
5 end

6 def tabella\_summaries  
…  
…  
7 @nome = erec\_item.asl\_identifier.nome  
8 puts @nome # restituisce il valore richiesto  
…  
…  
9 redirect\_to :action =\> ‘list’  
end

chiamando tabella\_summaries la riga 8 restituisce il valore previsto e  
successivamente la riga 2 restituisce nil

eliminando la riga 9 (redirect\_to) e sostituendola con la chiamata a  
list  
9 list  
la riga 2 restituisce il valore previsto (lo stesso restituito in riga  
8).

Se qualcuno mi puÃ² rispondere Vorrei capirne il motivo.  
Grazie  
BM

---

<div class="post-metadata">

**Author:** ![BSMaffettone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e68b1a/32.png) [@BSMaffettone](https://www.ruby-forum.com/u/BSMaffettone)\
**Post date:** [October 1, 2006, 7:20pm UTC](https://www.ruby-forum.com/t/variabile-istanza-e-redirect-to/70652/2 "2006-10-01T19:20:48Z")

</div>

Credo di capire che ti aspettassi che la variabile @nome dentro list  
dovesse rimanere valorizzata dopo la chiamata a tabella\_summaries. In  
realtÃ le uniche variabili che sono mantenute tra una chiamata e l’altra  
al controller sono quelle di sessione. Se sostituisci @nome con  
session[:nome] probabilmente il tuo codice funzionerÃ come ti aspetti.  
Evidentemente due chiamate successive al controller vanno ad usare due  
istanze diverse della classe e le variabili di istanza, quelle con @,  
non sopravvivono.

Ciao  
Paolo

B. Maffettone wrote:

> In una classe controller ho:
> 
> 1 def list  
> 2 puts @nome # restituisce nil \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
> 3 …  
> 4 …  
> 5 end
> 
> 6 def tabella\_summaries  
> …  
> …  
> 7 @nome = erec\_item.asl\_identifier.nome  
> 8 puts @nome # restituisce il valore richiesto  
> …  
> …  
> 9 redirect\_to :action =\> ‘list’  
> end
> 
> chiamando tabella\_summaries la riga 8 restituisce il valore previsto e  
> successivamente la riga 2 restituisce nil
> 
> eliminando la riga 9 (redirect\_to) e sostituendola con la chiamata a  
> list  
> 9 list  
> la riga 2 restituisce il valore previsto (lo stesso restituito in riga  
> 8).
> 
> Se qualcuno mi puÃ² rispondere Vorrei capirne il motivo.  
> Grazie  
> BM

---

<div class="post-metadata">

**Author:** ![BSMaffettone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e68b1a/32.png) [@BSMaffettone](https://www.ruby-forum.com/u/BSMaffettone)\
**Post date:** [October 1, 2006, 7:31pm UTC](https://www.ruby-forum.com/t/variabile-istanza-e-redirect-to/70652/3 "2006-10-01T19:31:53Z")

</div>

Paolo M. wrote:

> Evidentemente due chiamate successive al controller vanno ad usare due  
> istanze diverse della classe e le variabili di istanza, quelle con @,  
> non sopravvivono.

In effetti Ã¨ quello che avevo intuito e ho sostituito @nome  
con la variabile di classe @@nome ma alla chiamata di  
redirect\_to :action =\> ‘list’  
anche questa diventa nil.  
Non mi sembra di aver commesso qualche errore in quest’ultimo codice ma  
forse  
non Ã¨ cosÃ¬, oggi Ã¨ domenica e il cervello Ã¨ a riposo.

Se vuoi provare anche tu ?

Ciao e grazie  
BM

---

<div class="post-metadata">

**Author:** ![BSMaffettone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e68b1a/32.png) [@BSMaffettone](https://www.ruby-forum.com/u/BSMaffettone)\
**Post date:** [October 2, 2006, 8:09pm UTC](https://www.ruby-forum.com/t/variabile-istanza-e-redirect-to/70652/4 "2006-10-02T20:09:43Z")

</div>

Non sono regoline strane… ogni volta che viene invocata un’azione di  
Rails, quest’azione viene eseguita su un nuovo oggetto-controller che  
poi viene buttato via.

Se vuoi conservare uno stato fra un azione e l’altra, o lo metti nella  
sessione o lo metti nel database.

Convinciti che è giusto così!!! Vedila dal punto di vista del server:  
arriva una richiesta all’azione X, e restituisco 303 See Other,  
Location: azione Y. Questa è una singola transazione. Poi mi arriva  
una richiesta per l’azione Y; ma che ne so che venga dallo stesso  
client dell’azione precedente? L’unica maniera per saperlo è usare la  
session!

Matteo

---

<div class="post-metadata">

**Author:** ![BSMaffettone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e68b1a/32.png) [@BSMaffettone](https://www.ruby-forum.com/u/BSMaffettone)\
**Post date:** [October 2, 2006, 9:15pm UTC](https://www.ruby-forum.com/t/variabile-istanza-e-redirect-to/70652/5 "2006-10-02T21:15:52Z")

</div>

On 10/2/06, Matteo V. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Location: azione Y. Questa è una singola transazione. Poi mi arriva  
> una richiesta per l’azione Y; ma che ne so che venga dallo stesso  
> client dell’azione precedente? L’unica maniera per saperlo è usare la  
> session!
> 
> Matteo

Grazie mille Matteo per la tua ottima spiegazione.  
Mi mancava un piccolo aggancio e tu me l’hai dato 😉

---

<div class="post-metadata">

**Author:** ![BSMaffettone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e68b1a/32.png) [@BSMaffettone](https://www.ruby-forum.com/u/BSMaffettone)\
**Post date:** [October 2, 2006, 5:21pm UTC](https://www.ruby-forum.com/t/variabile-istanza-e-redirect-to/70652/6 "2006-10-02T17:21:17Z")

</div>

E’ Rails che ha qualche regolina strana… almeno mi sembrava di aver  
capito  
da alcuni post precedenti.  
In pratica tra azioni non vi sono possibilità di avere comunicazioni se  
non  
attraverso le sessioni…  
Il perchè non lo so 😛 ma sarei curioso di poterlo sapere perchè mi  
incuriosisce.
