У меня есть дерево активных объектов записи, что-то вроде:
class Part < ActiveRecord::Base
has_many :sub_parts, :class_name => "Part"
def complicated_calculation
if sub_parts.size > 0
return self.sub_parts.inject(0){ |sum, current| sum + current.complicated_calculation }
else
sleep(1)
return rand(10000)
end
end
end
Слишком сложно пересчитывать сложную калькуляцию каждый раз. Итак, мне нужен способ кэширования значения. Однако, если какая-либо часть изменена, ей необходимо аннулировать ее кеш и кеш его родителя, а также дедушку и бабушку и т.д.
Как черновик, я создал столбец для хранения кэшированных вычислений в таблице "parts", но это немного пахнет. Похоже, что должен быть более чистый способ кэшировать вычисленные значения, не набивая их вдоль "реальных" столбцов.