在Rails中加载和管理参考数据

时间:2009-12-18 00:00:03

标签: ruby-on-rails

我工作过的大多数应用程序都有一些存储在数据库中的参考数据,例如类别,邮政编码,区号等......这些信息很少会发生变化。大多数时候你想加载某种显示名称,就是这样。

目前这并没有引起太多麻烦,很容易:在进行查询时包含我需要的模型,但是前进会导致很多查询噪音。

理想情况下,我想在应用启动时加载参考数据,并在查询中引用它时,它将从缓存加载而不是转到数据库。

管理此问题的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

这是一个很好的问题,也是大多数Rails开发人员在某些时候可能不得不处理的问题。我已经尝试在启动时将所有内容加载到常量中。我还尝试使用Memcached或Redis和cached_modelcache_fu这样的插件,并在应用程序启动时自动填充缓存。但是,这些方法仅适用于查找单个对象,并且根本不与ActiveRecord集成(例如,不与关联一起使用),因为我确信您已经注意到了。

Memcached / Redis插件有一个明显的市场,它具有更好的ActiveRecord集成,但这听起来非常困难,所以我认为我们很快就不会看到任何内容。

让情况变得更糟的是,如果您预先加载大量数据,您可能不希望在开发环境中的每个请求上执行此操作,这很难避免,因为模型是惰性的 - 在开发中加载(并在每个请求上重新加载),并且可能需要模型来加载数据。这意味着一个好的解决方案必须与ActiveRecord紧密集成,因此无论数据来自数据库还是缓存(如果您不在开发中预加载),它都可以正常工作。

无论如何,对于冗长的不回答感到抱歉,但我认为讨论可能是我们现在能做的最好的事情。

希望我错了。任何人

答案 1 :(得分:0)

只需使用renum-gem来定义此类数据,并使用has_enum-gem来降低rails集成。