レガシーデータベースに接続し、entity-attribute-valueモデルを使用して連絡先の情報を格納するテーブルからデータのサブセットをプルする必要があります。表は次のようになります。
サブスクライバIDフィールドIDデータ 12ジャック 13スズメ 22ダン 23スミス
ここで、は、特定の顧客が持つことができるカスタムフィールド(名、姓、電話など)を一覧表示fieldid
するテーブルへの外部キーです。fields
関係するSQLは、現在のユーザーに基づくマスター連絡先リストに参加するだけでなく、戻したいすべてのフィールド(現在は6つのフィールドが必要)に対してテーブルをそれ自体に結合する必要があるため、かなり厄介です。
SQLは次のようなものです。
select t0.data as FirstName, t1.data as LastName, t2.data as SmsOnly
from subscribers_data t0 inner join subscribers_data t1
on t0.subscriberid = t1.subscriberid
inner join subscribers_data t2
on t2.subscriberid = t1.subscriberid
inner join list_subscribers ls
on (t0.subscriberid = ls.subscriberid and t1.subscriberid = ls.subscriberid)
inner join lists l
on ls.listid = l.listid
where l.name = 'My Contacts'
and t0.fieldid = 2
and t1.fieldid = 3;
RoRアプリケーションでこれをどのように処理する必要がありますか?これを抽象化して、属性を引き出すために通常の「ドット表記」を使用できるようにしたいと思います。幸いなことに、データは当面の間読み取り専用です。