Squeel子查询

时间:2016-04-11 17:48:22

标签: ruby-on-rails activerecord squeel

我正在尝试使用子查询来选择某些记录的最新状态。我在SQL中有以下查询,我想使用squeel gem在Rails中重新创建:

</b>

按照此处的指南:https://github.com/activerecord-hackery/squeel#joins我有以下子查询:

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

有效。无论如何将其加入Changerequest模型,我都会收到subquery = ChangerequestStatus.group(:changerequest_id).select { [changerequest_id, max(created_at).as(max_date)] } 错误

NoMethodError: undefined method 'changerequest_id' for #<Hash>

这看起来像我的语法相同。是什么给了什么?

1 个答案:

答案 0 :(得分:0)

我发现创建这些范围解决了这个问题:

在ChangerequestStatus.rb中:

/^[gdofpr]*r[gdofpr]*$/

在Changerequest.rb中:

var a = "frog dog trig srig swig strog prog log smog snog fig pig pug".split(" ");
var res = a.filter(x => /^[gdofpr]*r[gdofpr]*$/.test(x));
document.body.innerHTML = JSON.stringify(res, 0, 4);

它只是一个部分解决方案,因为它只适用于ID而不是日期,并假设以后的日期记录将始终具有更高的ID,而这种情况永远不会如此。