Ruby&;Activerecord-处理查询结果

Ruby&;Activerecord-处理查询结果,ruby,arrays,activerecord,Ruby,Arrays,Activerecord,我需要帮助。我正在优化Ruby项目。有很多单个查询,因此我使用ID数组一次读取它们,例如: projects = Project.find_by_id(array_of_ids) 我在速度上有了显著的提高。但问题是,当我想在这样的结果中搜索时,我如何处理这样的结果 p = projects .find{ |project| project.id==pr.id } # doesn't work 我是否可以将“项目”转换为数组或进一步使用活动记录方法? 我可以用Activerecord获得按参数

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

projects = Project.find_by_id(array_of_ids)
我在速度上有了显著的提高。但问题是,当我想在这样的结果中搜索时,我如何处理这样的结果

p = projects .find{ |project| project.id==pr.id } # doesn't work
我是否可以将“项目”转换为数组或进一步使用活动记录方法?
我可以用Activerecord获得按参数分组的二维“项目”数组吗?

这里有一些东西你没有看到

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+,那么最好使用命名范围lambda


希望这对你有所帮助

这里有一些东西你还没有找到

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+,那么最好使用命名范围lambda


希望获得此帮助

如果您希望返回ActiveRecord::Relationship对象(您可以对其执行进一步的SQL查询)而不是数组,则需要使用
scoped_by*
方法而不是
find_by*

此处可以找到
范围由*
确定的解释:

如果您使用的是
scoped\u by.*
,那么您的代码应该是这样的

projects = Project.scoped_by_id(array_of_ids)
p = projects.find(pr.id)

如果要返回ActiveRecord::Relationship对象(您可以对其执行进一步的SQL查询),而不是数组,则需要使用
scoped\u by.*
方法,而不是
find\u by.*

此处可以找到
范围由*
确定的解释:

如果您使用的是
scoped\u by.*
,那么您的代码应该是这样的

projects = Project.scoped_by_id(array_of_ids)
p = projects.find(pr.id)