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 に答える