这与常规的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
。从概念上讲,这些是由这四个值定义的组合键的最新]部署。
在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%'))
。
其他皱纹:
有什么想法吗?
这与常规的AREL或基于Sequel gem的模型有点“开箱即用”,因此,我正在寻找一些专家指导。我的应用程序外面有一个旧式(事务性)表,该表每隔...
这里是您的SQL查询到续集代码的直接翻译:
DB[:deployments].
select{max(deploy_id).as(deploy_id)}.
group(:app_deploy_name, :deploy_type, :domain, :deploy_env).
from_self(:alias=>:deploy_max).
join(:deployments, :deploy_id=>:deploy_id).
select_all(:deployments).
order(:deployments__app_deploy_name, :deployments__deploy_type, :deployments__domain)