ruby-on-rails - 如何找到一个没有很多的 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
akaleft_joins
是在 Rails 5 中引入的。对于 Rails 4,您需要使用一种解决方法:
User.joins("LEFT OUTER JOINS projects ON projects.user_id = users.id")
.where(projects: { id: nil })
推荐阅读
- r - 如何改变奇数位置的元素?
- reactjs - 使用 React 和 Formik 将值传递给高阶组件
- django - 操作系统错误:/usr/lib/x86_64-linux-gnu/libspatialite.so.7:
- python - tf.map_fn & tf.range 混淆结果
- ios - iOS Storyboard ViewController 变为空白
- sqoop - sqoop 中的映射器数量
- python - 如何在 Python 的散景圆图中添加图例
- java - 在junit测试中模拟用户控制台输入
- c++ - 在成员函数之间传递 const 变量作为数组的索引
- typescript - 下划线作为打字稿语法错误无法理解