0
我有它由类似于以下对象的遗留数据库模式:遗留数据库架构 - 键/值表
table=car
oid, something, something_else, ...
has many properties -> car_properties
table=car_properties
oid, car_id, keyname, value, ...
belongs to car
车子对象实际上是(逻辑)在该列的组合“car”表和“car_properties”表中的多行。
我正在研究使用此模式的应用程序的并行重写,所以我需要一些方法将此表模式映射回一个很好的ActiveRecord对象。理想情况下,我希望_properties表中的每个属性都可以作为“Car”类中的一个方法访问,因此我可以稍后更改基础表而不会破坏事情。
我可以静态地定义Car类中的方法,但是我想确保ActiveRecord魔术有效,所以像.save这样的工作,我可以在以后更改底层模式(意识到这可能会是应用程序中断)。
我该如何去做ActiveRecord?
澄清:
基本上,我想下面的工作
@car = Car.first
@car.something = something
@car.someprop = something
然而在上面,@code.someprop
实际上是@car.properties.where("keyname = ?", "someprop").value
很显然,我不想做一个SQL查询每一次,虽然,所以我正在寻找一个很好的方式来做到这一点。
除非我误解了如何accepts_nested_attributes_for的作品,我不知道这是相当我后。 – Innominate
我不认为ActiveRecord会帮你做到这一点。你可以用method_missing完成这个抽象层,但是你可能在这个过程中让自己疯狂。我更担心表示层。我认为关键是用户有一个很好的汽车和汽车性能界面? –
是的,但我也希望后端对象能够很好地工作......特别是当我们开始重构数据库设计时(在我们完成了大约3个空间的全部端口之前,这是不可能发生的) -6个月) – Innominate