环境:Rails 3.2.22
问题:
假设我有模型Topics
,Posts
和User
。
Posts
属于Topics
User
有很多Posts
我想查询Topic.all
,但包含与用户相关联的所有帖子。
我已经尝试了include
和eager_load
以及用户ID的where条件,但只返回符合条件的帖子。
我想要的是所有主题返回并仅包含与user_id条件匹配的帖子。
答案 0 :(得分:1)
在使用ActiveRecord后,我想出了如何进行查询。它需要@pshoukry指出的左连接,但它缺少两个项目。
AND
声明只需包含特定用户的帖子。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,因此无意修复它。
答案 1 :(得分:0)
尝试在您的关系中使用左连接
Topic.joins("LEFT JOIN posts ON topics.id = posts.topic_id")