Session

Per andare avanti con l’applicazione , posticipando la risoluzione del
problema, avevo definito una variabile globale che prendeva come valore
il nome dell’utente loggato.
(Sbaglio a pensare che la variabile globale definita in Application
verrà sovrascritta dal prossimo utente che si connetterà ?)
Certo che questo modo di fare mi creerà problemi ho deciso (ma non so se
è giusto) di fare in quest’altro modo:

In login_controller ho:
def login
if request.get?
session[:user_id] = nil
session[:user_name] = nil #**sostituisce var globale usata in
precedenza
@user = User.new
else
@user = User.new(params[:user])
logged_in_user = @user.try_to_login

  if logged_in_user
    session[:user_id] = logged_in_user.id
    session[:user_name] = logged_in_user.name

puts session[:user_id] # ok valore esatto
puts session[:user_name] # ok valore esatto

    @user = User.find(:first,:conditions => "name = 

‘#{@user.name}’")
redirect_to(:action => “index”)
else
flash[:notice] = “Combinazione user/password non valida”
end
end
end

Dopo il login dovrei filtrare tutti i record marcati col nome o con l’id
dell’utente loggato.
Nelle righe di codice a cui si fa riferimento a session[:user_name]
ricevo l’errore
undefined local variable or method `session’ for Nomeclasse:Class
Credevo che l’oggetto sessione fosse visibile a tutti.

Cosa devo sapere per risolvere il problema?
Quale è il modo ottimale per gestire questa esigenza?

In attesa … ringrazio in anticipo.
BM

A quanto vedo session[:user_name]
è vista nei vari controller, difatti la linea di seguito riportata
definita in controller Admin funziona

@requirement_pages, @requirements = paginate :requirements, :conditions
=> “status = 1 and amministratore = ‘#{session[:user_name]}’”, :order_by
=> “data DESC”, :per_page => 12

ma session[:user_name] non è visibile nel modello Requirement dove io
tentavo di fare

def self.count_charged
if session[:user_name] != ‘sadmin’
count(“status = 1 and amministratore = ‘#{session[:user_name]}’”)
else
count(“status = 1”)
end
end
ricevendo l’errore:
undefined local variable or method `session’ for Requirement:Class

che devo fare per rendere visibile in Requirement:Class
session[:user_name] ?

sempre ruby-ignoranza?
in attesa … grazie
BM

Ho risolto modificando questo

def self.count_charged
if session[:user_name] != ‘sadmin’
count(“status = 1 and amministratore = ‘#{session[:user_name]}’”)
else
count(“status = 1”)
end
end

in questo

def self.count_charged(amministratore)
if amministratore != ‘sadmin’
count(“status = 1 and amministratore = ‘#{amministratore}’”)
else
count(“status = 1”)
end
end

Si puo’ fare meglio ?