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

使用模型延迟加载/缓存SQL查询结果,sql,ruby-on-rails,ruby,caching,Sql,Ruby On Rails,Ruby,Caching,我正在开发一个系统(使用Rails 2.3.2、Ruby 1.8.7-p72),它有一个相当大的报告组件。为了提高性能,我创建了一个报告模型来归档旧报告。其思想是,如果已经存在一个任意条件集的匹配报告,则使用它,否则生成报告并保存结果 此外,我希望以这样一种方式设计报表模型:只有请求的属性才能运行其相应的SQL查询。这一切都源于这样一个事实,即每个属性都需要很长时间来计算,我不希望生成不被使用的结果。也就是说,我想做如下事情: def foo @foo ||= read_attribute(

我正在开发一个系统(使用Rails 2.3.2、Ruby 1.8.7-p72),它有一个相当大的报告组件。为了提高性能,我创建了一个报告模型来归档旧报告。其思想是,如果已经存在一个任意条件集的匹配报告,则使用它,否则生成报告并保存结果

此外,我希望以这样一种方式设计报表模型:只有请求的属性才能运行其相应的SQL查询。这一切都源于这样一个事实,即每个属性都需要很长时间来计算,我不希望生成不被使用的结果。也就是说,我想做如下事情:

def foo @foo ||= read_attribute(:foo) if @foo.nil? @foo = write_attribute(:foo, (expensive SQL query result)) end @foo end 德福 @foo | |=读取属性(:foo) 如果@foo.nil? @foo=write_属性(:foo,(昂贵的SQL查询结果)) 结束 @福 结束 然而,我遇到的问题是,结果没有正确地写入数据库,因此,代码不断地重新评估SQL查询


有人能告诉我为什么write_属性不起作用吗?此外,还有更好的方法吗?

在执行write\u属性后不需要调用“save”吗?

在执行write\u属性后不需要调用“save”吗?

结果表明我所做的很好。真正的问题是,对象的“id”查找被我在别处的一段代码所压倒。也就是说,实际写操作发生在数据库中,但主键错误。

结果表明,我所做的一切都很好。真正的问题是,对象的“id”查找被我在别处的一段代码所压倒。也就是说,实际写入发生在数据库中,但主键错误。

所以这些不是常规AR属性,而是模型中的实例方法?以及“没有正确地写入数据库”——你这么说是什么意思?你使用的是哪个版本的Rails?考虑使用UpDeTyAtAtdioTrave:WruteFieldValueV2.0已经被取消了,所以这些不是正则AR属性,而是模型中的实例方法?以及“没有正确地写入数据库”——你这么说是什么意思?你使用的是哪个版本的Rails?考虑使用UpDeTyAtAtdioTrave:WruteFieldValueV2.0。write_属性不要求您仍然调用save来发布更新吗?为什么要修改它?write_属性不要求您仍然调用save来发布更新吗? write_attribute