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ólnyEvent
s 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.