ActiveRecord – 查询所有并包含符合条件的关联

环境 :Rails 3.2.22

问题

让我们说我有模型TopicsPostsUser

Posts属于Topics User有很多Posts

我想查询Topic.all ,但包括与用户关联的所有post。

我已尝试使用includeeager_load以及用户标识的where条件,但只返回满足条件的post。

我想要的是所有主题返回并仅包含与user_id条件匹配的post。

在使用ActiveRecord后,我想出了如何进行查询。 它需要@pshoukry指出的左连接,但它缺少两个项目。

  1. AND语句只需包含特定用户的post。
  2. 需要在末尾附加ActiveRecord方法select以包含所需的字段。

要包括所有字段:

Topic.joins("LEFT JOIN posts ON posts.topic_id = topics.id AND posts.user_id = ?", user.id).select('topics.*, posts.*')

现在请注意。 对于那些使用Postgres和on Rails版本3.2。*的人来说,有一个错误,即连接表只返回所有列的字符串,忽略数据类型集。 Rails 4没有这个问题。在Rail的Github回购中发布了一个问题,但我似乎无法找到它。 由于不再支持3.2,因此无意修复它。

尝试在你的关系中使用左连接

 Topic.joins("LEFT JOIN posts ON topics.id = posts.topic_id")