我的应用拥有Question
has_many
型号的UserResponse
型号。
我想获得特定User
已回答的最后5个问题,以及在UserResponse
字段上过滤的相关user_id
个对象。
以下是我目前的情况:
Question.group("questions.id").
joins("inner join user_responses r on r.question_id = questions.id").
where("r.user_id = #{user_id}").
order("questions.id asc").limit(5)
这个查询让我得到了我想要的东西,但问题是当我从数组中得到Question
并且question.user_responses
结果是该问题的所有响应,而不仅仅是应该由上面的join / where子句过滤的那些。
我试过这样做:
Question.includes(:user_responses).group("questions.id").
joins("inner join user_responses r on r.question_id = questions.id").
where("r.user_id = #{user_id}").
order("questions.id asc").limit(5)
认为它会急切地加载每个响应......但它似乎没有那样的功能。
我哪里错了?
如果它有所不同,我需要急切加载所有内容的原因是因为我想获取数组并在其上调用to_json并从我的移动应用程序的Web服务返回json,所以我需要整个图表可用。
答案 0 :(得分:1)
我认为你在这里试图变得过于复杂。以下怎么样?
Question
.includes(:user_responses)
.where("user_id = ?", user_id)
.order("questions.id asc")
.limit(5)