我在 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 属性。
我的问题是,当我通过另一个上下文访问该对象时,rails 并没有像我预期的那样利用该数据。
例如:
假设我创建了一个帐户实例 (a = Account.find_by_id(2))。该 market_value 将在该对象上计算一次。
如果我与该帐户对象上称为“控股”(不在我的示例代码中)的东西有嵌套的 has_many 关系,我将希望每个持有对象(控股)能够使用它的父帐户对象。
但是,在我的代码中,我从它的嵌套持有对象 (my_holding.account.market_value) 访问该帐户 - 我重新实例化了该帐户对象的一个实例,并产生了昂贵的计算,即使它已经被计算过。
我怎样才能更好地利用该帐户的 market_value 属性,使其不会不断重新计算?