ActiveRecord – 查询所有并包含符合条件的关联
环境 :Rails 3.2.22
问题 :
让我们说我有模型Topics
, Posts
和User
。
Posts
属于Topics
User
有很多Posts
我想查询Topic.all
,但包括与用户关联的所有post。
我已尝试使用include
和eager_load
以及用户标识的where条件,但只返回满足条件的post。
我想要的是所有主题返回并仅包含与user_id条件匹配的post。
在使用ActiveRecord后,我想出了如何进行查询。 它需要@pshoukry指出的左连接,但它缺少两个项目。
-
AND
语句只需包含特定用户的post。 - 需要在末尾附加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")