【问题标题】:Ruby & Activerecord - Working with query resultsRuby & Activerecord - 处理查询结果
【发布时间】:2012-10-22 06:48:08
【问题描述】:

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

projects = Project.find_by_id(array_of_ids)

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

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

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

【问题讨论】:

    标签: ruby arrays activerecord


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

      这里有几件事你错过了

      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

      希望有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多