我已经得到了一个遗留数据库模式,它由类似于以下内容的对象组成:
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查询,所以我正在寻找一种很好的方法来实现这一点。
发布于 2012-09-11 22:53:44
除非我低估了,否则它应该是这样简单的:
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
https://stackoverflow.com/questions/12371838
复制相似问题