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

4

1 回答 1

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
于 2012-09-11T14:53:43.700 回答