私はマイケル・ハートルのrails tutorialを通じてつもりだと彼は仮想属性を定義するポイントになってきた、remember_token
以降remember
インスタンスメソッドでそれに値を代入します。仮想属性はどのようにメモリ内で管理されますか?
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
彼は、その後の値にアクセスしますremember
後のヘルパーメソッドにおける仮想属性が呼び出されます。
def remember(user)
user.remember
cookies.permanent.signed[:user_id] = user.id
cookies.permanent[:remember_token] = user.remember_token
end
私の解釈がremember
メソッドの後に実行される(とremember_token
が割り当てられている場合、それはから削除されますということでしたメモリ。明らかに、これは新しい値をcookies.permanent[:remember_token]
に割り当てるときに使用できるので、ここでは当てはまりません。
私の混乱の原因は、データの永続性に起因すると思います。 remember_token
をattr_accessor
の助けを借りてインスタンス変数にすると仮定すると、いつ正式に利用できなくなるのでしょうか?
オブジェクトが離れるとき。インスタンスメソッドは決して「利用不可能」になることはなく、定義されているオブジェクトの一部です。 – meagar
すみません。たぶん*インスタンスメソッド*自体ではなく、インスタンスメソッドが生成する値かもしれません。 –
これらの値は、他の値と同様にガベージコレクトされます。それらへの参照がある限り、それらは削除されません。 – meagar