我正在开发一个具有相当大的报告组件的系统(使用Rails 2.3.2,Ruby 1.8.7-p72)。为了提高性能,我创建了一个报告模型来存档旧报告。我们的想法是,如果已经存在任意条件的匹配报告,则使用它,否则生成报告并保存结果。
此外,我想以这样一种方式设计Report模型,即只有请求的属性才能运行相应的SQL查询。这一切都源于这样一个事实,即每个属性需要很长时间才能计算,而我宁愿不生成不会被使用的结果。即我想做点什么:
def foo @foo ||= read_attribute(:foo) if @foo.nil? @foo = write_attribute(:foo, (expensive SQL query result)) end @foo end
然而,我遇到的问题是结果没有正确写入我的数据库,因此代码不断重新评估SQL查询。
有谁可以告诉我为什么
write_attribute无效?此外,还有更好的方法吗?
答案 0 :(得分:1)
原来我正在做的事情很好。真正的问题是对象的“id”查找被其他地方的一段代码所取代。即实际写入发生在数据库中,但主键错误。
答案 1 :(得分:-1)
执行write_attribute后,是否需要调用“save”?