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)
但是,我还需要检查有帖子的用户。由于帖子在不同的表中,我该怎么做?
谢谢你。
您可以只使用 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)