使用模型延迟加载/缓存SQL查询结果

时间:2009-03-29 04:17:42

标签: sql ruby-on-rails ruby caching

我正在开发一个具有相当大的报告组件的系统(使用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
无效?此外,还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

原来我正在做的事情很好。真正的问题是对象的“id”查找被其他地方的一段代码所取代。即实际写入发生在数据库中,但主键错误。

答案 1 :(得分:-1)

执行write_attribute后,是否需要调用“save”?