私は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 の関係 (会議には複数のトークがありますが、会議なしのトークがあります) があります。列の定義を繰り返したり、継承を放棄したりせずにこれを達成する方法はありますか?MeetingEvent
編集
別の例を挙げると、継承について私が気に入っている部分は、一般的なEvents を個別に照会できることです。したがって、特定の日付に何かがあるかどうかを知りたい場合: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)。すべての関数にパッチを適用してプロパティをマージせずにこれを回避する方法はありますか? モデルを使用するときに、基礎となる構造を思い出したくありません。