Dziedziczenie tabeli Ruby Datamapper ze skojarzeniami

Zacząłem się uczyćDatamapper a to, co mi się podobało, to to, że mogę pisać moje modele z prawdziwym dziedzictwem.

Teraz zastanawiam się, czy można być bardziej zaawansowanym w tej kwestii:

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

Ten kod nie może utworzyć:title kolumna dlaTalk i oczywiście kolumna dyskryminatora ma tutaj małą wartość, ponieważ z widoku bazy danych powinny istnieć osobne tabele dla obuTalk iMeeting.

W końcu chcęTalk iMeeting udostępniać te same właściwości, co zdefiniowane wEvent ale z możliwymi dodatkowymi właściwościami i relacją 0..1: n (Spotkanie może mieć kilka rozmów, ale są rozmowy bez spotkania.) Czy istnieje sposób na osiągnięcie tego bez powtarzania definicji kolumn i / lub rezygnacji z dziedziczenia?

Edytować

Aby podać inny przykład: część, którą lubię w sprawie dziedziczenia, to ten ogólnyEvents można odpytać osobno. Więc kiedy chcę wiedzieć, czy jest coś na pewno:begin Data, nie muszę szukać dwóch lub więcej tabel, ale mogę po prostu zapytaćEvent stół. W pewnym sensie następująca struktura pasuje do moich potrzeb.

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

Jednak aby to wykorzystać, musiałbym ręcznie utworzyćEvent za każdym razem chcę utworzyć lub edytować aTalk. To znaczy, nie mogę tego zrobićtalk.begin lubTalk.create(:begin => Time.now). Czy jest sposób na obejście tego problemu bez łatania wszystkich funkcji i scalania właściwości? Nie chcę być przypominany o podstawowej strukturze podczas korzystania z modelu.

questionAnswers(1)

yourAnswerToTheQuestion