У меня есть дерево активных объектов записи, что-то вроде:
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
Это слишком дорого каждый раз пересчитывать сложный_счет. Итак, мне нужен способ для кэширования значения. Тем не менее, если какая-либо часть изменяется, она должна сделать недействительным свой кэш и кэш своего родителя, деда и т. Д. И т. Д.
В качестве черновика я создал столбец для хранения кэшированных вычислений в таблице «частей», но это пахнет немного гнилым. Похоже, что должен быть более чистый способ кэширования вычисленных значений, не помещая их вдоль «настоящих» столбцов.