RubyonRailsで書かれたWebアプリケーションを想像してみてください。そのアプリケーションの状態の一部は、モデルの説明に適合しないデータで表されます。この状態記述子は、モデルと同じデータベースに永続化する必要があります。モデルと異なる点は、そのクラスのインスタンスが1つだけ必要であり、他のクラスとの関係がないことです。
誰かがこのようなものに出くわしたことがありますか?
RubyonRailsで書かれたWebアプリケーションを想像してみてください。そのアプリケーションの状態の一部は、モデルの説明に適合しないデータで表されます。この状態記述子は、モデルと同じデータベースに永続化する必要があります。モデルと異なる点は、そのクラスのインスタンスが1つだけ必要であり、他のクラスとの関係がないことです。
誰かがこのようなものに出くわしたことがありますか?
あなたの説明から、rails-settingsプラグインはあなたが必要とすることをするべきだと思います。
Readmeから:
「設定は、グローバルキーと値のペアのテーブルを簡単に管理できるプラグインです。データベースに保存されているグローバルハッシュのように考えてください。操作には、メソッドのような単純なActiveRecordを使用します。不要なグローバル設定を追跡します。 Railsアプリにハードコードします。あらゆる種類のオブジェクトを保存できます。文字列、数値、配列、またはあらゆるオブジェクト。」
それがデータであり、データベースにある場合、それはモデルの一部です。
Rails では、データがデータベースにある場合、それはモデルにあります。この場合、モデルは「構成」と呼ばれる場合がありますが、Rails システムの ActiveRecord クラスにマッピングされたままです。
このデータが本当に静的である場合、データベースはまったく必要ないかもしれません。(例として) アプリケーション コントローラーで変数を使用できます。
class ApplicationController < ActionController::Base
helper :all
@data = "YOUR DATA HERE"
end
Rails アプリケーションで使用するデータをインスタンス化するために使用できるアプローチは多数あります。
これは実際には RoR の問題ではありません。これは一般的な OO 設計の問題です。
私だったら、おそらくデータをモデルとして概念化し、それをファクトリ メソッドとプライベート コンストラクターを使用してシングルトンにする方法を見つけるでしょう。
あるいは、これをロギングの一種と考えることができます。その場合、データベースを直接読み書きし、各リクエストの最初と最後に呼び出される Logger クラス (シングルトンでもあります) があれば十分です。
Railsモデルに収まらないとあなたが言う理由がわかりません。
それが単なる複雑なデータ構造である場合は、データベースのテキスト フィールドに一連の Ruby コードを保存するだけです :-)
たとえば、保存したい複雑なネストされたハッシュがある場合は、次を「データ」テキスト フィールドに割り当てます。
ComplexThing.data = complex_hash.inspect
読み返したいときは、
complex_hash = eval ComplexThing.data
このソリューションについて、さらに 2 つの点を指摘させてください。