おそらく混乱するタイトルですが、それをどのように置くのかはわかりません。例はそれをより明確にすべきである。私は同じ属性の多くを共有する多くの異なるモデルを持っています。だから各モデルでは、私はそれらの同じ属性を指定し、その特定のモデルに固有の属性を指定する必要があります。MongoDBをmongoidアダプター経由で使用するRails 3 - 単一表継承を使用せずに属性指定を共有する方法はありますか?
これらの基本属性を列挙し、単一表継承を使用せずにそのクラスから継承するクラスを作成する方法はありますか?共有属性とモンゴイードをすべて単一のモデルに入れ、他のモデルのベースモデルから継承すると、STIが強制され、すべてのモデルが単一のmongodbコレクションに格納され、「_タイプ」フィールドで区別されるからです。
これは私が持っているものです。
class Model_1
include Mongoid::Document
field :uuid, :type => String
field :process_date, :type => String
...
end
class Model_2
include Mongoid::Document
field :uuid, :type => String
field :process_date, :type => String
...
end
しかし、これは私が後だ機能です:問題はあなたが「Mongoidが含まれていない場合ということです
class Base_model
field :uuid, :type => String
field :process_date, :type => String
end
class Model_1 < Base_model
# To ensure STI is not enforced
include Mongoid::Document
# Attribute list inherited from Base_model
end
:: Document "をBase_modelに入れた場合、その基本モデルは" field ... "機能を知らない。しかし、モンゴイドをベースモデルに入れてそれを継承すると、STIが強制されます。
この特定の状況でSTIを実行することはできませんが、複数のモデルを持ち、すべて同じ属性リストが何度も繰り返し指定されています(モデル数が増え、モデル名を変更する必要があるときはいつでもどこでも変更する努力が...)。
。それはまさに私が探していたものです。モジュールはモデルのように扱われますか?モジュールをapp/modelsフォルダに入れるのが標準ですか、それとも一般的に/ libフォルダに入っていますか?決して実際にモジュールを使用する必要はなく、そうしたメタプログラミングを行う必要はありませんでしたが、それは私が探していた正確な答えです。 –
モジュールは単なるコンテナです。クラスに似ていますが、インスタンス化することはできませんので、Rubyプログラミング言語ではよくミックスインとして使用されます。 libフォルダは、それ(または初期化子)のための良い場所です。 –