2

我有一个初始化程序,它设置了在整个应用程序中使用的默认值。该值是一个 ActiveRecord 模型,我本质上是在应用程序的生命周期内缓存它:

@@default_region = Region.find_by_uri("whistler")

记录保证在数据库中:它是其他模型引用的夹具数据。这工作正常,除非在每次测试运行之前清除数据库的测试环境中。(我在边缘轨道上运行,我认为这是最近的行为:我曾经能够手动插入数据并在测试运行之间保留它。)我的regions.yml夹具文件中也有记录,但直到夹具才加载在 rails 初始化程序完成后。

处理这种对夹具数据的依赖的正确方法是什么?还是有更好的方法来构建它?我宁愿不使用 before_filter 因为在每个请求上重新加载它是没有意义的:它不会改变,除非在不同的部署中。

4

2 回答 2

2

我会在 region.rb 中添加这样的内容:

def self.default_region
  @@default_region ||= Region.find_by_uri("whistler")
end

然后,您可以在任何需要的地方以 Region.default_region 的形式访问它,并且它只被查找一次 - 第一次被调用 - 到那时,固定装置将就位。

于 2009-02-18T20:43:32.267 回答
1

对 Ruby 或 Rails 不太熟悉……但为什么不尝试“延迟加载”方案呢?基本上,有一个全局函数来检查数据是否已加载,如果没有,则从数据库中获取它,然后缓存它。如果它已经被缓存,只需返回它。

这样,在第一次调用该函数之前,您不会尝试访问数据库,并且到那时一切都应该被初始化。

于 2009-02-18T20:02:41.973 回答