Ruby on rails 选择一个用户的请求';我还没有回应

Ruby on rails 选择一个用户的请求';我还没有回应,ruby-on-rails,postgresql,activerecord,having-clause,Ruby On Rails,Postgresql,Activerecord,Having Clause,我正在使用heroku/rails/pgsql9.1.6,我的头撞在墙上,感觉这应该是一个非常简单的查询 我想展示用户尚未响应的最新“请求” 尝试1(在我推送到heroku/pgsql之前工作): 一旦我推送到heroku,该查询将生成一个错误: ActiveRecord::StatementInvalid:PGError:错误:未聚合 WHERE子句中允许的 尝试2:“拥有” 我在StackOverflow上发现一个帖子,说我应该试试“拥有”,所以我修改为 Request.includes(:

我正在使用heroku/rails/pgsql9.1.6,我的头撞在墙上,感觉这应该是一个非常简单的查询

我想展示用户尚未响应的最新“请求”

尝试1(在我推送到heroku/pgsql之前工作): 一旦我推送到heroku,该查询将生成一个错误:

ActiveRecord::StatementInvalid:PGError:错误:未聚合 WHERE子句中允许的

尝试2:“拥有” 我在StackOverflow上发现一个帖子,说我应该试试“拥有”,所以我修改为

Request.includes(:responses).having("responses.user_id=? AND count(responses.id)=0", user_id).where("requests.created_at > ?", days_ago )
这产生了一个新的错误。ActiveRecord::语句无效:PGError:错误:

列“requests.id”必须出现在GROUP BY子句中或在中使用 聚合函数

尝试3:“组” 然后,我将该问题修改为

Request.includes(:responses).group("requests.id").group("responses.id").having("responses.user_id=? AND count(responses.id)=0", user_id).where("requests.created_at > ?", days_ago ) 
这将运行,但返回一个空集,即使我知道它应该返回一个值

最佳猜测: 我怀疑这一点的问题在于2部分having子句,在当前格式中,它无意中排除了没有响应的用户(因此将始终是一个空集):

e、 g。
具有(“responses.user\u id=”和count(responses.id)=0”,user\u id)

与原始嵌入式选择相反,请选择:

选择计数(responses.id)=0,其中responses.user=

但我不确定having子句的正确形式应该是什么,以供尚未响应的表面用户使用

提前感谢您的帮助

试试看

Request.where('(SELECT Count(*) FROM responses WHERE responses.request_id = requests.id) > 0')
Request.where('(SELECT Count(*) FROM responses WHERE responses.request_id = requests.id) > 0')