次のようなオブジェクトで構成される従来のデータベース スキーマがあります。
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 クエリを実行したくないので、これを行うための良い方法を探しています。