即使我知道,至少据我所知,这是不是做与ActiveRecord关联的我寻求帮助,以实施“hibernatish”多态模型的默认方式。多态模型两轮牛车
例如,请考虑以下基本模型:
# Content only has one property named path
class Content < ActiveRecord::Base
self.abstract_class = true
end
和具体内容:
# Audio only has one property on it's own (duration).
# However, it should also inherit Content's property (path)
class Audio < Content
end
现在,使用ActiveRecord时,更准确的Rails 3 Beta 3的ActiveRecord的东西比较有趣的情况。如果在内容模型上将abstract_class设置为false,并执行以下操作:
Audio.create!(:path => '/dev/null')
它有点适用于Hibernate的角度。也就是说,内容记录与ID 1和音频记录创建也与ID创建 = 1
然而,问题#1是为了这个工作,你显然需要关闭abstract_class,这有点违反了这个抽象内容示例的全部要点。
此外,问题#2是,如果您打开abstract_class,创建音频实例时将失去内容的属性。而且,如果关闭它,创建音频实例时会失去“音频”属性。
理想,当遇到一个抽象类,然后将其子类,ActiveRecord的将提供抽象+混凝土性能的具体类被实例化,在这种情况下音频。实际上,这样一来,创建音频实例时,我们将有:
audio = Audio.new #=> <Audio id: nil, duration: nil, path: nil, created_at: nil, updated_at: nil>
,然后按[自然]当你将audio.path =“的/ dev/null的”,并进行了保存操作,ActiveRecord的会知道路径属性已被继承,因此需要在父级别级别持久化。此外,在相同的保存操作中,您应该设置音频的非继承属性。ActiveRecord还会在audios表中保留这些更改。
我的问题,在这个介绍之后,是如何绕过积极的记录并以这种方式增强它?
实际上,让我们假设我们正在开发一个旨在为这种功能提供活动记录的gem。你将如何去做,并做到这一点? PS:我实际上正在考虑开发这样的宝石,虽然这种骇人听闻不应该没有预先思考。所以,你的反馈是最受欢迎的。
最好的问候, DBA
随着时间的推移,我意识到了这一点。感谢您将我的问题放在文字中。 – DBA 2010-11-08 10:02:18