旧数据库模式 - 键/值表

时间:2012-09-11 14:18:27

标签: ruby-on-rails activerecord

我有一个遗留数据库模式,它包含类似于以下内容的对象:

table=car
oid, something, something_else, ...
has many properties -> car_properties

table=car_properties
oid, car_id, keyname, value, ...
belongs to car

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查询,所以我正在寻找一种很好的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

除非我解开它,否则应该是这样简单:

class CarProperty < ActiveRecord::Base
   set_primary_key :oid

   belongs_to :car
end

class Car < ActiveRecord::Base
   set_table_name :car
   set_primary_key :oid

   has_many :car_properties

   accepts_nested_attributes_for :car_properties
end
相关问题