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 に答える