如何从关系中删除一些项目?

时间:2014-11-21 23:37:42

标签: ruby-on-rails ruby arrays object

我正在从两个模型加载数据,一旦数据加载到变量中,我就需要从第一个关系中删除那些不在第二个关系中的项目。

样本:

users = User.all
articles = Articles.order('created_at DESC').limit(100)

我将这两个变量填充了关系数据。现在,我需要从articles中移除user_id对象中未包含users值的所有项目。因此articles只保留user_id的项目,即变量users

我用循环尝试了它,但它非常慢。我该如何有效地做到这一点?

修改

我知道有一种方法可以通过构建更好的查询来避免这样做,但在我的情况下,我不能这样做(尽管我同意在上面的例子中可以这样做)。那就是我在2个变量中加载了来自数据库的数据,我需要用Ruby处理它们。这样做有命令吗? 谢谢

2 个答案:

答案 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)