【发布时间】:2016-04-11 17:48:21
【问题描述】:
我正在尝试使用子查询来选择某些记录的最新状态。我在 SQL 中有以下查询,我想使用 squeel gem 在 Rails 中重新创建:
SELECT * FROM
changerequests c JOIN
(SELECT changerequest_id, max(created_at) max_created_at from
changerequest_statuses
GROUP BY changerequest_id) as max_status
ON c.id = max_status.changerequest_id
JOIN changerequest_statuses cs
ON cs.changerequest_id = c.id and max_status.max_created_at = cs.created_at
JOIN dim_change_statuses dcs
ON dcs.id = cs.dim_change_status_id
按照此处的指南:https://github.com/activerecord-hackery/squeel#joins 我有以下子查询:
subquery = ChangerequestStatus.group(:changerequest_id).select { [changerequest_id, max(created_at).as(max_date)] }
这行得通。但是将它加入到 Changerequest 模型中,我得到一个 NoMethodError: undefined method 'changerequest_id' for #<Hash> 错误
Changerequest.joins{[changerequest_statuses, subquery.as('max_status').on { id == max_status.changerequest_id}]}
这对我来说看起来像相同的语法。什么给了?
【问题讨论】:
标签: ruby-on-rails activerecord squeel