Variables d'instance de classe dans ActiveRecord (Ruby On Rails)
-
11-12-2019 - |
Question
J'essaie de stocker une valeur dans une classe de modèle, par exemple les valeurs de quelques cases à cocher.
J'ai pensé que je pourrais les stocker dans une variable d'instance de classe, cependant, ces valeurs sont effacées lorsqu'un utilisateur clique ailleurs sur l'écran.
Comment puis-je conserver les valeurs de mes variables d'instance de classe.
Par exemple
class Person < ActiveRecord::Base
def setAge(age)
@@age = age
def getAge
return @@age
cependant, il semble que @@age soit vide après sa définition.
La solution
Le framework Rails recharge les classes dans le development
mode.Toutes les valeurs définies dans les requêtes précédentes à la variable de classe sont perdues dans une nouvelle requête.Si vous exécutez votre serveur dans le production
mode, votre code fonctionnera.
Ce que vous essayez de faire est une mauvaise pratique car les requêtes simultanées peuvent écraser l'état et lorsque vous générez plusieurs instances de votre serveur rails, cette solution ne fonctionnera pas (comme mentionné par @iltempo)
Si vous essayez de conserver l'état sur deux requêtes client, il est préférable d'utiliser session
variables.
demande 1
session[:age] = params['age']
demande 2
u = User.new
u.age = session[:age]
Autres conseils
comme @Nash mentionné, ce n'est pas un code rubis ici.
Toutefois, si vous stockez des données sur niveau de classe, il n'est valable que pour le processus en cours.Cela signifie que si vous exécutez plusieurs processus tels que les données de passagers et d'autres serveurs Web ne seront pas partagés entre ces processus.
aussi l'âge semble être lié à une instance de personne au lieu de la classe.