У меня есть модель, которая генерируется путем анализа файла данных. Есть несколько интересных значений, которые отсутствуют в исходном файле данных, но могут быть получены из тех, которые есть.Ленивая настройка атрибутов модели в Rails?
Однако многие из этих производных значений дорого вычисляются, поэтому я хотел бы сохранить их в базе данных после их вычисления.
Я попытался это:
def profit
if not self[:profit]
update_attribute :profit, expensive_computation
end
self[:profit]
end
К сожалению, это только будет сделано полдела. Вычисленное значение сохраняется, но каждый раз, когда я вызываю прибыль, он снова вычисляет значение.
UPDATE:
Оказывается, проблема была не в методе, а в find_by_sql заявлением ранее на том, что у Rails запутался о идентификаторах моделей. Код, который я получил, был следующим:
def profit
unless read_attribute(:profit)
update_attribute(:profit, expensive_computation)
self.save!
end
read_attribute(:profit)
end