Наследование таблиц Ruby Datamapper с ассоциациями
Я начал учиться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
а такжеMeeting
иметь те же свойства, что определены вEvent
но с возможными дополнительными свойствами и с отношением 0..1: n (Совещание может иметь несколько бесед, но есть беседы без встречи.) Есть ли способ сделать это, не повторяя определения столбцов и / или не отказываясь от наследования?
редактировать
Чтобы привести другой пример: часть, которая мне нравится в наследовании, это то, что общееEvent
s могут быть запрошены отдельно. Итак, когда я хочу знать, есть ли что-то в определенном:begin
дата, мне не нужно смотреть в две или более таблиц, но могу просто запросить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)
, Есть ли способ обойти это без исправления всех функций и слияния свойств? Я не хочу напоминать о базовой структуре при использовании модели.