如何找到一个没有多少的Activerecord条目



所以假设我们有一个用户模型,它有很多项目

如何找到没有项目的用户?

一个非常低效的方法是这样做:

all_projects_with_users = Project.all.pluck(:user_id).uniq
all_users = User.all.pluck(:id)
users_without_projects = all_users - all_projects_with_users

有更好的方法吗?

使用左外部联接,其中联接表id为空:

User.left_joins(:projects)
.where(projects: { id: nil })

left_outer_joins又称left_joins是在Rails5中引入的。对于Rails4,您需要使用一个变通方法:

User.joins("LEFT OUTER JOINS projects ON projects.user_id = users.id")
.where(projects: { id: nil })

这是我脑海中的一个快速解决方案,希望它能有所帮助。

User.joins('left outer join projects where projects.user_id = users.id').where('projects.id is null')

对于轨道5,您可以使用left_joins

User.left_joins(:projects).where('projects.user_id is null')

相关内容

  • 没有找到相关文章

最新更新