我从两个模型加载数据,一旦数据加载到变量中,那么我需要从第一个关系中删除那些不在第二个中的项目。如何从关系中删除某些项目?
样本:
users = User.all
articles = Articles.order('created_at DESC').limit(100)
我有这两个变量充满了关系数据。现在我需要从articles
中删除所有项目,其中user_id
值不包含在users
对象中。因此在articles
将只保留user_id
的项目,即变量users
。
我尝试了一个循环,但它非常缓慢。我如何有效地做到这一点?
编辑:
我知道有一种方法,以避免建设一个更好的查询这样做,但对我来说,我不能这样做,(虽然我同意,在上面的例子中有可能做到这一点)。那是因为我有两个变量从数据库加载数据,我需要用Ruby来处理它们。有这样的命令吗? 谢谢
感谢@JoshBodah,我知道有办法建立一个更好的查询,但我已经有了变量中的数据并需要处理它们(我更新了OP)。 – user984621 2014-11-22 11:52:13
我认为问题在于迭代集合并执行'.include?'检查的幼稚解决方案由于'users'的大小太慢了。你有的其他选择是1)用'id'对'User.all'进行排序并使用二进制搜索(Array#bsearch)2)使用集合来找到交集3)在迭代时插入一个Hash来记忆你的工作(例如遍历文章并检查hash中的user_id是否在散列中缓存每个用户时搜索用户)。二进制搜索的方法是可以的(Set也可以),但哈希方式可能会很慢 – 2014-11-22 15:31:23