私はDatamapperの学習を始めましたが、気に入った点は、実際の継承を使用してモデルを記述できることです。
今、これについてもっと進歩することが可能かどうか疑問に思います:
class Event
include DataMapper::Resource
property :id, Serial
property :begin, DateTime
property :type, Discriminator
end
class Talk<Event
property :title, String
belongs_to :meeting
end
class Meeting<Event
has n, :talks
end
そのコードは と の:title
列を作成できませんTalk
。明らかに、識別子の列はここではほとんど価値がありません。データベース ビューからは、 と の両方に別々のテーブルが必要だからTalk
ですMeeting
。
したがって、最終的には、で定義されているものと同じプロパティを共有したいTalk
と考えていますが、可能性のある追加のプロパティと 0..1:n の関係 (会議には複数のトークがありますが、会議なしのトークがあります) があります。列の定義を繰り返したり、継承を放棄したりせずにこれを達成する方法はありますか?Meeting
Event
編集
別の例を挙げると、継承について私が気に入っている部分は、一般的なEvent
s を個別に照会できることです。したがって、特定の日付に何かがあるかどうかを知りたい場合:begin
、2 つ以上のテーブルを調べる必要はなく、テーブルをクエリするだけで済みますEvent
。ある意味で、次の構造は私のニーズに合う可能性があります。
class Event
include DataMapper::Resource
property :id, Serial
property :begin, DateTime
end
class Talk
include DataMapper::Resource
property :id, Serial
property :title, String
belongs_to :event
belongs_to :meeting
end
class Meeting
include DataMapper::Resource
property :id, Serial
belongs_to :event
has n, :talks
end
ただし、これを使用するには、Event
を作成または編集するたびに手動で作成する必要がありTalk
ます。つまり、私はできませtalk.begin
んTalk.create(:begin => Time.now)
。すべての関数にパッチを適用してプロパティをマージせずにこれを回避する方法はありますか? モデルを使用するときに、基礎となる構造を思い出したくありません。