私はDatamapperを学習し始めました。私が気に入ったのは、本当の継承を使ってモデルを書くことができるということでした。Ruby 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
コードがTalk
ため:title
列の作成に失敗したと明らかに、識別カラムは、ここにほとんど価値があることを、ので、データベースビューでは、Talk
とMeeting
の両方に別のテーブルが存在する必要があります。
だから、最後に、私はEvent
ではなく、可能な追加のプロパティを持つと0..1で定義されたものと同じ性質を共有するTalk
とMeeting
をしたい:nの関係(会議は、いくつかの話し合いを持つことができますが、協議があります列の定義を繰り返したり、継承を放棄することなく、これを達成する方法はありますか?
編集は
別の例を与える:私は相続の事を好きな部分は、一般的な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)
を行うことはできません。すべての機能にパッチを当てたり、プロパティをマージしたりせずに、これを回避する方法はありますか?私は、モデルを使用する際に基礎となる構造を思い出させたくありません。
単一継承、クラステーブル継承、または具体的なテーブル継承を継承する継承のタイプを教えてください。 http://martinfowler.com/eaaCatalog/ – MattMcKnight
私はRubyクラスの継承を意味します。 – Debilski
テーブル単位の意味でも、Rubyモデルを個別に使用し、サブクラスから親と後ろにキャスト/アサインすることができれば、それほど気にしません。 – Debilski