У меня есть модель, которая генерируется путем анализа файла данных. Существует несколько интересных значений, которые отсутствуют в исходном файле данных, но могут быть получены из следующих значений:
Однако многие из этих производных значений являются дорогостоящими для вычисления, поэтому я хотел бы сохранить их в базе данных после их вычисления.
Я пытался это:
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