代码之家  ›  专栏  ›  技术社区  ›  Andrew Vit

Rails初始值设定项中对设备数据的依赖性

  •  2
  • Andrew Vit  · 技术社区  · 15 年前

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

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

    记录保证在数据库中:它是其他模型引用的夹具数据。除了在每次测试运行之前清除数据库的测试环境中,这一点可以很好地工作。(我在Edge Rails上运行,我认为这是最近的行为:我以前可以手动插入数据,并在测试运行之间保留它。)我在 regions.yml fixture文件,但在完成rails初始值设定项之后才加载fixture。

    处理对夹具数据如此依赖的正确方法是什么?或者有更好的方法来构造这个?我不想使用before_过滤器,因为在每个请求上重新加载都没有意义:除非在不同的部署上,否则它不会改变。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Sarah Mei    15 年前

    我在region.rb中放了类似的东西:

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

    然后,您可以在需要的地方以region.default_region的形式访问它,并且它只被查找一次-第一次调用它时-到那时,设备将就位。

        2
  •  1
  •   bobwienholt    15 年前

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

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