Variabile istanza e redirect_to

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

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

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

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

On 10/2/06, Matteo V. [email protected] 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 :wink:

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 :stuck_out_tongue: ma sarei curioso di poterlo sapere perchè mi
incuriosisce.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs