列出发布 Ruby on Rails 5 帖子的用户

Des*_*ner 1 ruby sql ruby-on-rails ruby-on-rails-5

目前我有这个查询来拉取所有拥有头像的用户:

@users = User.all.order('RANDOM()').where.not(avatar: nil)
Run Code Online (Sandbox Code Playgroud)

但是,我还需要检查有帖子的用户。由于帖子在不同的表中,我该怎么做?

谢谢你。

Seb*_*lma 5

您可以只使用 User 和 Post 之间的关联(如果 Post 是您的模型),这将检查两种情况下的外键和主键是否匹配,最终检查用户是否记录了一些 Post:

User.order('RANDOM()').joins(:posts).where.not(avatar: nil)
# SELECT "users".*
# FROM "users"
# INNER JOIN "posts" ON
# "posts"."user_id" = "users"."id"
# WHERE ("users"."avatar" IS NOT NULL) ORDER BY RANDOM()
Run Code Online (Sandbox Code Playgroud)

以另一种方式,您可以检查关联模型(依赖于 User 的模型)的 id 是否不为零,这意味着它作为关联记录存在,例如:

User.order('RANDOM()').joins(:posts).where.not(avatar: nil)
                                    .where.not(posts: { id: nil })
Run Code Online (Sandbox Code Playgroud)