比較的静的なデータを含む小さなテーブルがある場合、アプリの起動時に Active Record にこれをロードさせ、このデータのためにデータベースにアクセスする必要がないようにすることは可能ですか?
理想的には、このデータに関係を持つ他のモデルから結合できるようにしたいことに注意してください。
例として、電話番号の接頭辞が付いた国のリストがあります。このリストは変更される可能性が低く、変更された場合は管理者によって変更されます。他のテーブルはこれと関係があるかもしれません (例えば、国への参照を持っているユーザーが与えられた場合、国の電話プレフィックスを検索したいかもしれません)。
ここで同様の質問を見ましたが、6 年前のもので、Rails 2 を参照していますが、私は Rails 5 を使用しており、それ以降に何かが導入された可能性があります。
好ましい解決策は次のとおりです。
- 組み込みの Rails / ActiveRecord 機能により、起動時に 1 回テーブルをロードし、その後、キャッシュされたテーブルと関係を持つ他のレコードがロードされた場合、キャッシュされたオブジェクトに自動的にリンクします (つまり、手動で MyModel.all をどこかにキャッシュするだけでは十分ではありません。データベースにクエリを実行することでリレーションシップが読み込まれるためです)。
- 上記を行う保守ライブラリ。
- どちらも利用できない場合、別の方法として、静的データセットをメモリ内列挙型/ハッシュなどとして定義し、このデータとの関係を持つレコードにハッシュ キーを保持し、それらのモデルにメソッドを定義して、データベースに永続化されたキーを使用して、ハッシュ内のオブジェクトを使用して検索します。これはかなり手動のようですが...
[編集] 潜在的な解決策で考慮すべきもう 1 つの点 - 手動の解決策 (3) では、API 経由でアクセスできるように、そのようなデータのカスタム コントローラーとルートも必要になります。理想的には、そうしたデータを RESTful API (読み取り専用 - GET のみ) を介して提供できるソリューションがあれば、必要に応じて Scaffolding などの標準的な Rails メカニズムを使用し、あまり手動で介入する必要がありません。