Je vais par Michael Hartl de rails tutorial et sont venus à un point où il définit un attribut virtuel, remember_token
et attribue plus tard une valeur dans une méthode d'instance remember
:Comment les attributs virtuels sont-ils gérés en mémoire?
class User < ApplicationRecord
attr_accessor :remember_token
...
def remember
self.remember_token = User.new_token
update_attribute(:remember_digest, User.digest(remember_token))
end
end
Il accède ensuite à la valeur de l'attribut virtuel dans une méthode d'assistance après remember
est appelé:
def remember(user)
user.remember
cookies.permanent.signed[:user_id] = user.id
cookies.permanent[:remember_token] = user.remember_token
end
Mon interprétation est que, après la méthode remember
est exécutée (et où remember_token
est attribué, il est retiré de Mémoire. Évidemment, ce n'est pas le cas ici car il est toujours disponible lors de l'attribution d'une nouvelle valeur à cookies.permanent[:remember_token]
. Je suppose que ma source de confusion provient de la persistance des données. En supposant que le remember_token
est transformé en variable d'instance à l'aide de attr_accessor
, quand devient-il officiellement indisponible?
Lorsque l'objet disparaît. Les méthodes d'instance ne deviennent jamais indisponibles, elles font partie de l'objet sur lequel elles sont définies. – meagar
Je suis désolé. Peut-être pas les * méthodes d'instance * en soi mais la valeur que la méthode d'instance produit. –
Ces valeurs sont récupérées comme n'importe quelle autre valeur. Tant qu'il y a une référence à eux, ils ne seront pas supprimés. – meagar