紛らわしいタイトルかもしれませんが、他にどう言えばいいのかわかりません。例はそれをより明確にするはずです。同じ属性の多くを共有する多くの異なるモデルがあります。したがって、各モデルで同じ属性を指定し、次にその特定のモデルに固有の属性を指定する必要があります。
これらの基本的な属性をリストするクラスを作成し、単一テーブルの継承を使用せずにそのクラスから継承する方法はありますか? すべての共有属性と Mongoid インクルードを単一のモデルに入れ、他のモデルのその基本モデルから継承すると、STI が適用され、すべてのモデルが単一の mongodb コレクションに格納され、「_type」フィールドで区別されます。
これは私が持っているものです:
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
しかし、これは私が求めている機能です:
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
問題は、Base_model に "include Mongoid::Document" がない場合、その基本モデルは "field ..." 機能を認識しないことです。ただし、基本モデルに mongoid インクルードを配置して継承すると、STI が適用されます。
この特定の状況で STI を実行することはできませんが、同じ属性リストが何度も指定された複数のモデルを持つのはコーディングの悪夢です (モデルの数が増えており、それぞれが約 15 ~ 20 の属性を共有しているため、いつでもモデル名を変更する必要があります。どこでも変更するのは大変です...)。