如何限制ActiveRecord查询,然后运行“where”子句?

问题描述:

我试图找到一个调查的答复,限制回复的数量限制在用户的计划指定的限制,然后对于每个选择,我想找到有多少响应。我当前的查询看起来是这样的:如何限制ActiveRecord查询,然后运行“where”子句?

Response.joins(choice: { question: :survey }) 
    .where(surveys: { id:survey.id }) 
    .limit(plan.response_limit) 
    .where(choice: object) 

然而,这个查询运行“其中”条款,然后限制查询。有人可以告诉我如何编写一个我想要的查询吗?

编辑:

我张贴查询生成的SQL语句:

SELECT "responses".* FROM "responses" 
INNER JOIN "choices" ON "choices"."id" = "responses"."choice_id" 
INNER JOIN "questions" ON "questions"."id" = "choices"."question_id" 
INNER JOIN "surveys" ON "surveys"."id" = "questions"."survey_id" 
WHERE "surveys"."id" = 1 AND "responses"."choice_id" = 1 
LIMIT 5000 

编辑2:SQL格式

+0

什么是SQL产生和你期望什么SQL? – Anthony

+0

编辑:我将SQL添加到帖子本身。 我不知道SQL查询应该是什么样子,但我知道我想要做什么:我想要查找给定调查的响应,将结果限制为例如5000,然后查找响应的数量在有限的结果中给出选择ID。 –

+0

这是SQL查询通常的样子。 LIMIT子句始终列在查询的末尾。这并不意味着它将它们全部提取出来,然后运行一个限制......它只是按照标准写的。 –

可以使用from方法从一个子查询来选择:

subquery = Response.joins(choice: { question: :survey }) 
    .where(surveys: { id:survey.id }) 
    .limit(plan.response_limit) 

responses = Response.from(subquery, :resp) 
    .where(choice: object) 

我不是100%确定Rails如何处理子查询场景,所以你可能需要调整到这样的东西,而不是:

responses = Response.from(subquery) 
    .where("resp.choice_id = ?", object) 
+0

我试过这两个查询,并且都返回相同的错误: 'PG :: UndefinedTable:错误:缺少表格“响应”的FROM-clause条目 LINE 1:SELECT“responses”。* FROM(SELECT“responses”。 * FROM“respo ...' 编辑:修剪了错误信息 –

+0

我已经编辑了我的答案以使用表别名('resp'),我认为它会修复错误。我从来没有真正使用过这个功能不过,我可能需要更多的技巧 –

+0

我尝试使用表别名,但我得到同样的错误,我必须阅读“from”方法和子查询 - 这是陌生的领域。 –