Variables de sessions


#1

Bonjour,

Je gallère depuis plusieures heures sur un truc complètement con.

Je recherche à récupérer une valeur dans un modèle via une variable de
session.

J’ai du mal à trouver de l’info sur les sessions rails, ça a l’aire très
simple, il suffirait d’utiliser session[:truc].

Il semble aussi que les variables de sessions ne soient pas accessibles
depuis les modèles ??

Alors j’ai créé un “getters” et un “setters” comme ceci :

def self.get_comp_id
return session[:user_comp_id]
end

def self.set_comp_id(comp_id)
session[:user_comp_id] = comp_id
end

J’obtient cette erreur :

Symbol as array index

#{RAILS_ROOT}/app/controllers/users_controller.rb:8:in []=' #{RAILS_ROOT}/app/controllers/users_controller.rb:8:inset_comp_id’

Qualqu’un a une idée simple pour récupérer cette valeur ??

Merci.


#2

Vincenzo :

Je gallère depuis plusieures heures sur un truc complètement con.

Je recherche à récupérer une valeur dans un modèle via une
variable de session.

J’ai du mal à trouver de l’info sur les sessions rails, ça a l’aire très
simple, il suffirait d’utiliser session[:truc].

Il semble aussi que les variables de sessions ne soient pas
accessibles depuis les modèles ??

Dans le modèle MVC, les modèles n’ont pas à se soucier
de l’environnement. Elles ont des méthodes auxquelles
tu passes des paramètres, des variables et vont réagir
en conséquence. Dans les variables, certaines peuvent
provenir des sessions.

Un exemple, c’est un modèle Article qui a une méthode
editable_by?(user)

Et dans ton contrôleur, tu fais un appel article.editable_by?(current_user)

current_user est une méthode suivant le schéma classique,
elle retourne un objet User suivant session[:user_id].

J’obtient cette erreur :

Symbol as array index

#{RAILS_ROOT}/app/controllers/users_controller.rb:8:in []=' #{RAILS_ROOT}/app/controllers/users_controller.rb:8:inset_comp_id’

Qualqu’un a une idée simple pour récupérer cette valeur ??

Si tu as défini ces méthodes dans ton contrôleur,
çane marchera pas car tu as des méthodes de classe
et non des méthodes d’instance. Vire les self dans tes def self…

– Jean-François.


#3

En fait j’utilise auth_generator : http://penso.info/auth_generator

Il y a une méthode reload dans le model User :

def reload

Just to be sure we have all the fields

u = User.find_first([“login = ? AND confirmed= 1”, self.login])
self.validkey = u.validkey
self.newemail = u.newemail
self.ident = true
self.id = u.id
u.ident = true
return u
end

Ce que j’ai fait c’est ajouter une colonne company_id dans la table
users de manière à avoir plusieurs login identiques mais pour des
companies différents (unique login and company_id)

Cette méthode reload (qui recharge l’objet user) doit recharger en
fonction du login (comme actuellement) mais également en fonction de
company_id.

Hors, si je modifie le find comme ceci :

u = User.find_first([“login = ? AND confirmed= 1 and company_id = ?”,
self.login, self.company_id])

Il ne retrouve pas company_id.

Ma première idée a été de trouver comment self.login pouvait être
récupéré alors que company_id non, mais je ne trouve pas.

J’ai donc décidé de stocker ce company_id dans une session de manière Ã
pouvoir recharger correctement.

Si quelqu’un à une idée elle sera la bienvenue … :slight_smile:
Comment puis-je faire fonctionne self.company_id de la même manière que
self.login ce qui serait la méthode la plus propre.

Meri à tous.


#4

Je recherche à récupérer une valeur dans un modèle via une variable de
session.

J’ai aussi fait la meme “erreur”. Mais j’ai lu (via un lien envoyé sur
cette
meme ML) qu’il ne faut pas oublier que les modèles sont indépendants du
contexte, par exemple ils doivent pouvoir fonctionner en interactif, ou
lors des
tests unitaires, qui se déroulent sans browser, donc sans session !

gUI