5

RubyonRailsで書かれたWebアプリケーションを想像してみてください。そのアプリケーションの状態の一部は、モデルの説明に適合しないデータで表されます。この状態記述子は、モデルと同じデータベースに永続化する必要があります。モデルと異なる点は、そのクラスのインスタンスが1つだけ必要であり、他のクラスとの関係がないことです。

誰かがこのようなものに出くわしたことがありますか?

4

5 に答える 5

3

あなたの説明から、rails-settingsプラグインはあなたが必要とすることをするべきだと思います。

Readmeから:

「設定は、グローバルキーと値のペアのテーブルを簡単に管理できるプラグインです。データベースに保存されているグローバルハッシュのように考えてください。操作には、メソッドのような単純なActiveRecordを使用します。不要なグローバル設定を追跡します。 Railsアプリにハードコードします。あらゆる種類のオブジェクトを保存できます。文字列、数値、配列、またはあらゆるオブジェクト。」

http://github.com/Squeegy/rails-settings/tree/master

于 2008-09-22T13:35:01.733 に答える
3

それがデータであり、データベースにある場合、それはモデルの一部です。

于 2008-09-22T11:06:54.243 に答える
1

Rails では、データがデータベースにある場合、それはモデルにあります。この場合、モデルは「構成」と呼ばれる場合がありますが、Rails システムの ActiveRecord クラスにマッピングされたままです。

このデータが本当に静的である場合、データベースはまったく必要ないかもしれません。(例として) アプリケーション コントローラーで変数を使用できます。

class ApplicationController < ActionController::Base
  helper :all 
  @data = "YOUR DATA HERE"   
end

Rails アプリケーションで使用するデータをインスタンス化するために使用できるアプローチは多数あります。

于 2008-09-22T11:22:57.497 に答える
1

これは実際には RoR の問題ではありません。これは一般的な OO 設計の問題です。

私だったら、おそらくデータをモデルとして概念化し、それをファクトリ メソッドとプライベート コンストラクターを使用してシングルトンにする方法を見つけるでしょう。

あるいは、これをロギングの一種と考えることができます。その場合、データベースを直接読み書きし、各リクエストの最初と最後に呼び出される Logger クラス (シングルトンでもあります) があれば十分です。

于 2008-09-22T11:09:07.030 に答える
0

Railsモデルに収まらないとあなたが言う理由がわかりません。

それが単なる複雑なデータ構造である場合は、データベースのテキスト フィールドに一連の Ruby コードを保存するだけです :-)

たとえば、保存したい複雑なネストされたハッシュがある場合は、次を「データ」テキスト フィールドに割り当てます。

ComplexThing.data = complex_hash.inspect

読み返したいときは、

complex_hash = eval ComplexThing.data

このソリューションについて、さらに 2 つの点を指摘させてください。

  • データ構造が標準の Ruby クラスではない場合、単純なインスペクトでは対応できない可能性があります。どこかに #<MyClass:0x4066e3c> が表示されている場合は、何かが正しくシリアル化されていません。
  • これは単純な実装です。Unicode データを使用するリスクがある場合、またはカスタムメイドのクラスを実際に大量に保存する場合は、実際のマーシャリング ソリューションを確認することをお勧めします。
于 2008-09-22T13:24:24.490 に答える