我开始学习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
为 and 创建列,Talk
显然,鉴别器列在这里没有什么价值,因为从数据库视图来看,应该有单独的表Talk
和Meeting
。
因此,最后,我希望Talk
并Meeting
共享与定义相同的属性,Event
但可能具有附加属性和 0..1:n 关系(会议可以有多次会谈,但有会谈没有会议。)有吗在不重复列定义和/或放弃继承的情况下实现此目的的方法?
编辑
再举一个例子:我喜欢继承的部分是,general 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
or Talk.create(:begin => Time.now)
。有没有办法在不修补所有功能和合并属性的情况下解决这个问题?我不想在使用模型时被提醒底层结构。