J'ai un modèle qui est généré en analysant un fichier de données. Il y a plusieurs valeurs intéressantes qui ne sont pas présentes dans le fichier de données d'origine mais qui peuvent être dérivées de celles qui le sont.Réglage paresseux des attributs du modèle dans Rails?
Cependant, beaucoup de ces valeurs dérivées sont chères à calculer, donc je voudrais les stocker dans la base de données une fois qu'elles ont été calculées.
J'ai essayé ceci:
def profit
if not self[:profit]
update_attribute :profit, expensive_computation
end
self[:profit]
end
Malheureusement, cela ne se fait la moitié du travail. La valeur calculée est stockée, mais chaque fois que j'appelle profit, elle calcule à nouveau la valeur.
MISE À JOUR:
Il s'avère que le problème n'a pas été dans la méthode, mais dans une déclaration find_by_sql plus tôt qui avait Rails confus au sujet des id des modèles. Le code j'ai fini avec était le suivant:
def profit
unless read_attribute(:profit)
update_attribute(:profit, expensive_computation)
self.save!
end
read_attribute(:profit)
end