比較的静的なデータを含む小さなテーブルがある場合、アクティブレコードにアプリの起動時にこのデータを読み込ませ、このデータのデータベースにアクセスする必要はありませんか?Rails 5 Active Record - テーブルをメモリに保持することは可能ですか?
このデータは、理想的には、このデータと関係のある他のモデルからの結合が可能であることを望みます。
たとえば、電話番号のプレフィックスを持つ国のリスト - このリストは変更されていない可能性があります。変更された場合、管理者によって変更されます。他のテーブルはこれとの関係を持っているかもしれません(例えば、国への参照を持つユーザーがあれば、国の電話のプレフィックスを検索したいかもしれません)。
私は同様の質問hereを見ましたが、6歳で、Rails 2を参照していますが、Rails 5を使用していて、その後何かが導入されている可能性があります。
好ましい溶液は次のようになります。
- 内蔵のRails/ActiveRecordの機能を一度起動時に、その他のレコードがその後にロードされるキャッシュされたテーブルと関係を持っている場合は、テーブルをロードするために、キャッシュされたにリンクオブジェクトを自動的に(つまり、MyModel.allをどこかに手動でキャッシュするだけでは、データベースへのクエリによって関係がロードされるため、十分ではありません)。
- 上記を行うライブラリです。
- どちらも利用できない場合は、静的データセットをメモリ内の列挙型またはハッシュまたは同様のものとして定義し、このデータとの関係を持つレコードにハッシュキーを保持し、これらのモデルは、データベースに保持されているキーを使用してハッシュ内のオブジェクトを使用して検索します。これは
[EDIT] もうひとつは、潜在的な解決策を検討して...しかし、非常にマニュアルらしい - マニュアルソリューションは、(3)また、APIを介してアクセスするカスタムコントローラと、このようなデータのルートを必要とします。理想的には、あまりにも多くの手作業を必要とせずに、足場のような標準的なレール機構を使用して、RESTful API(読み取り専用 - GETのみ)を介してデータを提供できるソリューションがあれば理想的です。
あなたは 'enum'を使うことができます。 – RSB
@RSB - 私は誤解されるかもしれませんが、' enum'は実際には数字の文字列識別子として機能しませんか?意味は、列挙型は複雑なオブジェクトではなく、1つの値に過ぎませんか?これはいくつかの状況に適しているかもしれませんが、私はそれがここに適しているかどうかはわかりません。 例:私たちが国 - >電話プレフィックスを再び例に取るならば、私たちは国の部分と電話プレフィックス部分の両方を必要とします。また、 'User'と' Company'があれば、どちらも同じ国 - >電話のマッピングにアクセスする必要があるかもしれないので、両方のModelクラス(または親クラス)でenumを複製する必要がありますか? ありがとう – asibs
私はあなたがオプション3を使用しなければならないと思います。1、本当に可能ではない、それは単にSQLの仕組みではありません。あなたはデータベースを照会しなければなりません、彼らは技術の別個の部分です。 2はあなたが探しているライブラリに依存します。例えばカルメンは国や州ではうまく機能し、そのデータを 'yml'ファイルhttps://github.com/jim/carmenに保存しますが、それがあなたが探しているデータでなければ、あなたは解決しなければなりません手動で更新されたアプローチ(ymlファイル)を使用します。 – Sean