Ruby on rails Rails 3:如何使用includes()加载关联并应用条件?

Ruby on rails Rails 3:如何使用includes()加载关联并应用条件?,ruby-on-rails,activerecord,join,eager-loading,Ruby On Rails,Activerecord,Join,Eager Loading,我的应用程序有Question模型,而有许多用户响应模型 我想获取特定用户用用户id字段中过滤的相关UserResponse对象回答的最后5个问题 以下是我目前拥有的: 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").limi

我的应用程序有
Question
模型,而
有许多
用户响应
模型

我想获取特定
用户
用户id
字段中过滤的相关
UserResponse
对象回答的最后5个问题

以下是我目前拥有的:

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)
这个查询返回了我想要的内容,但问题是当我从数组中获取一个
问题
并执行
问题时。用户回答
结果是该问题的所有回答,而不仅仅是应该由上面的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)
认为它会急切地加载每个响应…但它似乎不是这样运行的

我哪里做错了


如果有区别的话,我之所以需要急切地加载所有内容,是因为我想获取数组并调用它上的_json,然后从我的移动应用程序的web服务返回json,所以我需要完整的可用图形。

我想你在这里想得太复杂了。下面呢

Question
  .includes(:user_responses)
  .where("user_id = ?", user_id)
  .order("questions.id asc")
  .limit(5)

我觉得你想把事情弄得太复杂了。下面呢

Question
  .includes(:user_responses)
  .where("user_id = ?", user_id)
  .order("questions.id asc")
  .limit(5)

你为什么要在这里分组?你为什么要在这里分组?是的,你是对的。我认为查询过去更为复杂,我没有从头开始解决问题,而是尝试推敲旧代码。非常感谢您快速准确的回复。应该提到的是,您有可能使用user_id param进行sql注入。当然不会,但这是stackoverflow,人们会复制并粘贴此代码,然后更改它并。。所以最好这样做:where(“r.user\u id=?”,user\u id)。有关sql注入的更多信息,请参见此处-
r
未定义。应该是
user\u响应。改为user\u id
。呼叫正确。我想我可以只是一个用户id,因为它是明确的。是的,你是对的。我认为查询过去更为复杂,我没有从头开始解决问题,而是尝试推敲旧代码。非常感谢您快速准确的回复。应该提到的是,您有可能使用user_id param进行sql注入。当然不会,但这是stackoverflow,人们会复制并粘贴此代码,然后更改它并。。所以最好这样做:where(“r.user\u id=?”,user\u id)。有关sql注入的更多信息,请参见此处-
r
未定义。应该是
user\u响应。改为user\u id
。呼叫正确。我想我可以只是一个用户id,因为这是一个明确的定义。