Cosa sono le variabili virtuali?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Come da oggetto, vorrei capire bene il significato di variabile
virtuale… ad esempio

def variabile
@variabile
end

Vi ringrazio.


Matteo Buferli
WEB: http://www.buferli.com
PGP FINGERPRINT: B7C9 BE0A F77F 4747 56A2 87EC F6E5 8A01 65BB 58C1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFH/m4M9uWKAWW7WMERAkEHAJ0WHAHGoAt3Hkp9RCA9wJc16XeJVgCffPvR
D058QVVEWWQ0dmqlXMWl6vg=
=TDEl
-----END PGP SIGNATURE-----

quando metti la chiocciola prima del nome della variabile, rendi
quella variabile disponibile nella tua view.

es:

def test
@aaa = “ciao ciao”
bbb = “dadadsads”
end

tu nella view potrai usare solo @aaa, bbb sarà valida solo all’
interno del metodo del controller.

<%= @aaa %> questo quando la view viene processata diventa “ciao ciao”

Saluti Q

Non ho mai sentito la definizione ‘variabile virtuale’ prima d’ora.
Nell’esempio che posti, nello scope corrente puoi usare la funzione
‘variabile’ per recuperare il valore di @variabile, ma non puoi
impostarne il valore tramite ad esempio ‘variabile=foo’.
Per fare questo dovresti creare un’altra funzione tipo.

def variabile=(valore)
@variabile=valore
end

E’ quello che viene fatto automaticamente dal metodo attr_accessor.
Si tratta dell’equivalente delle funzioni getter e setter di java e
affini.
Forse è questo che intendi con virtuale, visto che a volte nel codice
non è immediatamente possibile distinguere se con variabile=foo sto
agendo su una variabile locale o su un metodo accessor.

Il giorno 10/apr/08, alle ore 21:44, Matteo Buferli ha scritto:

On Apr 10, 2008, at 10:56 PM, Luca G. wrote:

Io ho letto di “variabili virtuali” è un nome dato agli attributi di
istanza di una sottoclasse di ActiveRecord::Base, che non sono il
risultato di una mappatura di un attributo di una tabella.

Allora al limite saranno ATTRIBUTI virtuali :slight_smile:

Mi pare sia presente in restful_authentication, l’attributo password
di
User in un commento viene appellato come virtuale.

In parole molto povere sono attributi “di appoggio” che vivono
tipicamente solo durante
la creazione dei modelli, come “password” in questo caso (e’ la
password in chiaro
inserita dall’utente, mentre sul database viene salvata la versione
criptata).
Un altro esempio e’ <nome_attributo>_confirmation, che serve per la
validazione con
validates_confirmation_of :nome_attributo

S.

Io ho letto di “variabili virtuali” è un nome dato agli attributi di
istanza di una sottoclasse di ActiveRecord::Base, che non sono il
risultato di una mappatura di un attributo di una tabella.

Mi pare sia presente in restful_authentication, l’attributo password di
User in un commento viene appellato come virtuale.

Luca

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Perfetto, utilissimi come sempre.
Ne approffito data l’ora e vedendo che non riesco a uscirne, sto
implementando un login come avrete immaginato, ma non mi e’ ben chiara
una cosa

codice

def login
session[:user_id] = nil
if request.post?
user = User.authenticate(params[:name], params[:password])
if user
# perche’ :user_id?
session[:user_id] = user.id
redirect_to(:action => index)
else
flash[:notice] = “Invalid user/password combination”
end
end
end

def index
# voglio @person
end

I miei account user, hanno un campo person_id a cui fanno riferimento
per le credenziali e quant’altro, ora io nel def index vorrei

  1. avere quella persona in @person ad esempio
  2. verificarne il type
  3. in base al type mandarlo all’index del controller specifico

Ora io sono alle prime armi e chiedo scusa per l’ignoranza, oltre ai
problemi implementativi qui di sopra, non riesco a capire il significato
di
session[:user_id] = user.id
e penso inoltre che il mio problema principale sia il non capire come
vengono passati i dati tra

  • da def a def (come sopra)
  • da view a def
  • da view a def

Vi ringrazio vivamente.

Buonanotte!


Matteo Buferli
WEB: http://www.buferli.com
PGP FINGERPRINT: B7C9 BE0A F77F 4747 56A2 87EC F6E5 8A01 65BB 58C1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFH/p1h9uWKAWW7WMERAnCNAJ46aEN7hMjRy3v64QcHLPgrZQv6bACeMiUk
ueZJvnWs4zd70Ev2W4kD5XM=
=vod/
-----END PGP SIGNATURE-----

Ciao Matteo,
Per rispondere alla domanda sull user_id in sessione, ti rimando a
questo tutorial: Danger of model in session
(http://railscasts.com/episodes/13).

Se vuoi ottenere Person associato ad User, devi modellare così le tue
classi:

class Person < ActiveRecord::Base
has_one :user
end

class User < ActiveRecord::Base
belongs_to :person
end

In questo modo ti basta invocare: @user.person

I dati non vengono “passati” da metodo a metodo del controller.
Quando ActionController riceve una request, crea una nuova istanza del
tuo controller, per cui tutti gli attributi decorati con ‘@’ (d’istanza)
sono visibili in tutti i metodi. Ovviamente sono visibili per il tempo
in cui la request viene servita. Perché dopo viene distrutta
quell’instanza del controller, in modo da servire la prossima richiesta.

Per quanto riguarda il passaggio alla view, devi sapere che Rails usa
ERB per renderizzare le pagine, semplicemente effettuando un bind con
tra il controller ed il tuo template (index.html.erb). Quindi, anche
stavolta le variabili d’istanza sono “visibili” nei templates associati.

Spero d’essere stato chiaro.

Luca

Matteo Buferli wrote:

Ora io sono alle prime armi e chiedo scusa per l’ignoranza, oltre ai
problemi implementativi qui di sopra, non riesco a capire il significato
di
session[:user_id] = user.id

Cosa non hai capito?
Era la stessa cosa scrivere:
session[‘ilmiouserid’] = user.id

lo scopo è memorizzare l’id dello user in una variabile di sessione per
capire successivamente se l’utente ha effettuato il login.

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