各インスタンスに計算量の多いデータを少し保存したい ActiveRecord モデルにインスタンス変数を作成しました...これを行うコードは次のとおりです。
class Account < ActiveRecord::Base
after_initialize :init
attr_accessor :market_value
def init
self.market_value ||= my_lengthy_function
end
end
モデルのインスタンスを初期化するときに、そのインスタンス データ (market_value) を実行するためにヒットを取得します。
これは機能します - market_value プロパティを再計算する必要がないことがわかります。
私の問題は、別のコンテキストを介してそのオブジェクトにアクセスすると、レールが期待どおりにそのデータを活用しないことです。
例えば:
アカウントのインスタンスを作成するとします (a = Account.find_by_id(2))。その market_value は、そのオブジェクトに対して 1 回計算されます。
そのアカウント オブジェクトの "holdings" (私のサンプル コードにはありません) と呼ばれる入れ子になった has_many 関係がある場合、これらの各保持オブジェクト (ホールディング) がその親アカウント オブジェクトを使用できるようにする必要があります。
ただし、私のコードでは、ネストされた保持オブジェクト (my_holding.account.market_value) からアカウントにアクセスします。そのアカウント オブジェクトのインスタンスを再インスタンス化すると、既に計算されているにもかかわらず、コストのかかる計算が発生します。
アカウントの market_value プロパティをうまく活用して、再計算を繰り返さないようにするにはどうすればよいですか?