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

时间:2015-09-18 22:13:46

标签: ruby-on-rails activerecord

环境:Rails 3.2.22

问题

假设我有模型TopicsPostsUser

Posts属于Topics User有很多Posts

我想查询Topic.all,但包含与用户相关联的所有帖子。

我已经尝试了includeeager_load以及用户ID的where条件,但只返回符合条件的帖子。

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

2 个答案:

答案 0 :(得分:1)

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

  1. AND声明只需包含特定用户的帖子。
  2. 需要在末尾附加ActiveRecord方法select以包含您想要的字段。
  3. 包含所有字段:

    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,因此无意修复它。

答案 1 :(得分:0)

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

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