我正在从两个模型加载数据,一旦数据加载到变量中,我就需要从第一个关系中删除那些不在第二个关系中的项目。
样本:
users = User.all
articles = Articles.order('created_at DESC').limit(100)
我将这两个变量填充了关系数据。现在,我需要从articles
中移除user_id
对象中未包含users
值的所有项目。因此articles
只保留user_id
的项目,即变量users
。
我用循环尝试了它,但它非常慢。我该如何有效地做到这一点?
修改
我知道有一种方法可以通过构建更好的查询来避免这样做,但在我的情况下,我不能这样做(尽管我同意在上面的例子中可以这样做)。那就是我在2个变量中加载了来自数据库的数据,我需要用Ruby处理它们。这样做有命令吗? 谢谢
答案 0 :(得分:1)
假设您在belongs_to
型号上有Article
关系:
articles.where.not(users: users)
这会给你最多100,但可能更少。如果你想在条件下返回100(我没有经过测试,但想法是一样的,请将用户的条件放在where语句中):
Articles.includes(:users).where.not(users: true).order('created_at DESC').limit(100)
答案 1 :(得分:0)
执行此操作的最佳方法可能是使用SQL连接。这会有用吗?
Articles.joins(:user).order('created_at DESC').limit(100)