我有一個通過解析數據文件生成的模型。有幾個有趣的值不存在於原始數據文件中,但可以從那些值中派生出來。Rails中模型屬性的懶設置?
但是,這些派生值中的很多值計算起來都很昂貴,所以我想在計算後將它們存儲在數據庫中。
我已經試過這樣:
def profit
if not self[:profit]
update_attribute :profit, expensive_computation
end
self[:profit]
end
不幸的是,只得到一半的完成任務。計算的值被存儲,但每次我稱爲贏利時,它都會再次計算該值。
UPDATE:
原來,問題是不是在方法,但是在早些時候,一個的find_by_sql聲明瞭Rails的困惑模型的ID的。我結束了與代碼是這樣的:
def profit
unless read_attribute(:profit)
update_attribute(:profit, expensive_computation)
self.save!
end
read_attribute(:profit)
end