これは、通常の AREL または Sequel の gem ベースのモデルとは少し「すぐに使える」ものなので、専門家のガイダンスを探しています。
何かがデプロイされるたびに更新される、アプリの外部にあるレガシー (トランザクション) テーブルがあります。Deployments
次のようになります。
DEPLOY_ID | APP_DEPLOY_NAME | DEPLOY_TYPE | DOMAIN | DEPLOY_ENV | ...
1 | adn | dta | ruby | dev1 | ...
2 | adn | dta | ruby | dev1 | ...
* 3 | adn | dta | ruby | dev1 | ...
* 4 | adn | dta | ruby | dev2 | ...
* 5 | adnb | dta | ruby | dev1 | ...
上記のマークされた線は、DEPLOY_ID
一意のAPP_DEPLOY_NAME + DEPLOY_TYPE + DOMAIN + DEPLOY_ENV
エントリごとの最高値を表しています。概念的には、これらはこれら4 つの値によって定義される複合キーの最新の展開です。
SQL では、自己結合を使用してこのビューを簡単に作成できます。
select deployments.* from
-- deploy_max
(select max(DEPLOY_ID) as DEPLOY_ID from DEPLOYMENTS
group by APP_DEPLOY_NAME, DEPLOY_TYPE, DOMAIN, DEPLOY_ENV) deploy_max
join DEPLOYMENTS as deployments on
deploy_max.DEPLOY_ID = deployments.DEPLOY_ID
order by deployments.APP_DEPLOY_NAME asc,
deployments.DEPLOY_TYPE asc,
deployments.DOMAIN asc
(おそらくもっと良い書き方がありますが、それは私がやろうとしていることを示しています)
ただし、これはクエリチェーンの利点を失います...つまり、次のようなものを取得できないようです: latest.filter(:APP_DEPLOY_NAME.like('%adn%'))
。
その他のシワ:
- 私はデータベースを所有していないので、ビューを追加できません。
- 独自のテーブルを作成する場合、データの更新について心配する必要があります (トランザクション テーブルはライブであり、継続的に更新されます)。
何か案は?