1

我需要帮助。我正在优化 Ruby 项目。有很多单个查询,所以我用 id 数组一次读取它们,例如:

projects = Project.find_by_id(array_of_ids)

而且我的速度有了显着提高。但问题是当我想在这样的结果中搜索时,我该如何处理这样的结果?

p = projects .find{ |project| project.id==pr.id } # doesn't work

我可以将“项目”转换为数组或进一步使用活动记录方法吗?我可以使用 Activerecord 获得按某些参数分组的“项目”的二维数组吗?

4

2 回答 2

1

如果要返回 ActiveRecord::Relation 对象(您可以对其进行进一步的 SQL 查询)而不是数组,则需要使用该scoped_by_*方法。find_by_*

scoped_by_*可以在这里找到解释:http: //api.rubyonrails.org/classes/ActiveRecord/Base.html

如果您使用scoped_by_*.

projects = Project.scoped_by_id(array_of_ids)
p = projects.find(pr.id)
于 2012-10-22T07:08:25.583 回答
0

您在这里缺少几件事

a) projects = Project.find_by_id(array_of_ids)

只会给出一个结果

要获取和数组,您需要像这样触发查询

a) projects = Project.find_all_by_id(array_of_ids)

如果 Rails 3+ 可以通过 arel 轻松完成,那么您使用的是哪个版本的 Rails

 b) projects = Project.where("id in (?)",array_of_ids)

现在这会给你一个关系对象,你可以在它上面链接你的进一步查询

如果您使用的是 Rails 2.3+,最好使用named_scopelambda

希望这有帮助

于 2012-10-22T07:07:30.510 回答