Herança da tabela Ruby Datamapper com associações
Comecei a aprenderDatamapper e o que eu gostei foi que eu posso escrever meus modelos com herança real.
Agora eu me pergunto, se é possível ser mais avançado sobre isso:
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
Esse código não consegue criar o:title
coluna para oTalk
e obviamente, a coluna discriminadora é de pouco valor aqui, porque a partir de uma visualização de banco de dados, deve haver tabelas separadas para ambosTalk
eMeeting
.
Então, no final, eu queroTalk
eMeeting
para compartilhar as mesmas propriedades definidas emEvent
mas com possíveis propriedades adicionais e com uma relação 0..1: n (Uma reunião pode ter várias palestras, mas há conversas sem uma reunião.) Existe uma maneira de realizar isso sem repetir as definições da coluna e / ou abandonar a herança?
Editar
Para dar outro exemplo: a parte que eu gosto sobre a herança é aquela parte geralEvent
s pode ser consultado separadamente. Então, quando eu quero saber, se há algo em um certo:begin
data, eu não preciso de olhar em duas ou mais tabelas, mas poderia apenas consultar oEvent
mesa. De certa forma, a estrutura a seguir poderia atender às minhas necessidades.
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
No entanto, para usar isso, eu precisaria criar manualmente umEvent
toda vez, eu quero criar ou editar umTalk
. Isto é, eu não posso fazertalk.begin
ouTalk.create(:begin => Time.now)
. Existe uma maneira de contornar isso sem corrigir todas as funções e mesclar as propriedades? Não quero ser lembrado da estrutura subjacente ao usar o modelo.