Il existe différentes façons d'interpréter votre question, pas sûr que vous vouliez dire:
Toutes les actions (dans les contrôleurs identiques ou différents) peuvent utiliser des variables d'instance du même nom. Mais seulement 1 action est appelée par cycle de requête/réponse HTML.
Si vous souhaitez qu'une variable d'instance soit définie en une action et ait la même valeur dans une autre action (dans le cadre d'une requête différente du même navigateur Web), utilisez le magasin de sessions. Par exemple,
def index
@balance=1000
# @balance can be used in views
session[:balance] = @balance # now stored for the rest of the user's session
end
def increment
@balance = session[:balance] # initialize
@balance += 1
session[:balance] = @balance # update
end
####################################################
# a DRYer way is to use a filter to set the value
# Added, also we set the value to 0 if nil so it can later be added to.
# Remember that nil + 1 => error.
before_filter :load_balance
def load_balance
@balance = session[:balance] || BigDecimal.new('0') # use BigDecimal
# for money calculations
end
# the filter can be set per controller.
ce qui est le point d'utiliser les variables d'instance ici avec la session cant, nous utilisons simplement des séances que par exemple? (Session [: balance] = session [: balance]! .to_i +) Merci pour votre aide !! est il y a une autre alternative? – fenec
Oui, vous pouvez le faire. Mais 1) généralement l'idée est de séparer l'utilisation des valeurs (valeurs d'instance) du stockage des valeurs (l'objet session). En outre, 2) il n'est pas approprié d'accéder à la session à partir de la vue. - Vous pouvez le faire, mais ça casse MVC. Et 3) Vous pouvez stocker plus tard le @balance ailleurs. Donc, vous devriez isoler le stockage/récupération à des méthodes spécifiques. Re alternative: oui, vous pouvez stocker la balance dans un compte ou un objet utilisateur, le cas échéant. De cette façon, il sera associé/stocké sur le long terme, pas seulement pour la session de navigation actuelle –