2

データベース以外のデータ クラスを Rails 3 の「モデル」として作成する必要がありますか、それとも /lib 領域の基本クラスとして作成する必要がありますか?

計算されたドメイン オブジェクトを表すいくつかのクラスを構築したいと考えています。したがって、フィールドはデータベースのテーブル/列を参照しません。クラスには、データを使用するメソッドもあります。

質問 - これらのクラスを生成するとき、これらは /lib 領域に配置した通常の Ruby クラスである必要がありますか? または、これに Rails モデルを使用する必要がありますか (そして、「rails g model ...」で生成します)?

4

3 に答える 3

2

テーブルレス モデルは、おそらく app/models に保持する必要があります。APIにアクセスするものがいくつかあります。Rails のActiveModelは、Active Record の便利な機能のいくつかを取り入れるのに役立ちます。

于 2012-02-24T02:11:53.383 に答える
1

興味深い質問..数週間前に同じ質問がありました。

これらのクラスをモデルディレクトリの下に置きました。これが私がその決定を思いついた方法です。私が書いたクラスは、特定のアプリに完全に関連しており、少なくとも現時点では誰とも共有できる共通の機能はありません。また、既存のモデルを使用して、そのクラスのデータをクエリする必要もありました。というわけで、モデルディレクトリ配下のクラスにしました。私は間違っているかもしれませんが、それが私が今やったことです。

Web およびモバイル アプリに特定の API セットを使用している別のケースでは、API とやり取りするコードを gem にすることを考えています。ここで注意すべきことは、API セットも私のシステムの一部であり、私のアプリでのみ使用されるということです。

于 2012-02-24T02:10:31.660 に答える
1

データベース テーブルにマップされないクラスは、アプリ/モデル内に存在できます。ActiveRecord::Base からクラスを拡張する代わりに、拡張 (または独自の拡張) なしでクラスを宣言するだけです。

CanCan 能力モデルはこの良い例です。app/models/ にありますが、ActiveRecord::Base を拡張しません。CanCan の能力モデルの詳細については、https ://github.com/ryanb/cancan/wiki/Defining-Abilities をご覧ください。

また、 lib/ の下のコードは、デフォルトでは開発環境でリロードされないことも考慮してください。

于 2012-02-24T02:12:26.723 に答える