在rails中缓存一堆简单的查询

时间:2011-10-04 08:47:44

标签: ruby-on-rails database caching

在我的应用程序中有对象,它们属于国家,地区,城市,类型,群组,公司和其他集合。每一组都相当简单 - 它有id,name,有时还有一些指向其他集的指针,它永远不会改变。有些集很小,我将它们加载到before_filter中:

@countries = Country.all
@regions = Region.all

但是我打电话给,例如,     offer.country.name 要么     region.country.name 我的应用程序执行单独的db query-by-id,尽管我已经加载了它们。之后我通过:include执行查询,并且这个由急切加载生成的id ids不依赖于我已经使用另一个id-query加载了这个数据。

所以我想要一些缓存。例如,我可能会在我的before_filter中生成带有键作为记录-id的哈希值,然后调用@countries [offer.country_id] .name。这种情况似乎我不需要急切加载,这里很容易打开Rails.cache。但也许有一些智能的内置rails解决方案不需要重写所有内容?

1 个答案:

答案 0 :(得分:1)

缓存类似模型的列表不会缓存其他模型关联中存在的单个实例。

Rails团队已经在Rails 3.1中实现Identity Maps来解决这个问题,但是现在默认禁用它。您可以启用它并查看它是否适用于您的问题。