2009-02-18 95 views
2

我有一个初始化程序,它设置了整个应用程序使用的默认值。该值是一个ActiveRecord的模式,我基本上是缓存它为应用程序的生命周期:依赖于轨道初始化器中的夹具数据

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

记录是保证数据库中的:这是这是由其他型号参考夹具数据。这工作正常,除了在每次测试运行之前清除数据库的测试环境。 (我在边栏上运行,我认为这是最近的行为:我曾经可以手动插入数据,并保持在测试运行之间。)我的regions.yml灯具文件中也有记录,但灯具未加载直到导轨初始化完成后。

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

回答

2

我把这样的事情在region.rb:

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

然后你就可以访问它Region.default_region无论你需要它,它只是抬起头来一次 - 第一次,它被称为 - 届时夹具将到位。

1

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

这样,在第一次调用该函数之前,您将不会尝试击中数据库,并且到那时应该初始化所有内容。

+0

在测试环境中,数据库被清除,所以此时没有什么可以从数据库延迟加载。如果它不存在,我将不得不从文件中将它加载到数据库中。 – 2009-02-18 20:46:00

+0

我以为你说过,在轨道初始化器完成后,加载了夹具。我错过了什么吗? – bobwienholt 2009-02-18 20:49:10