如何搜索从ActiveRecord结果映射的哈希?

时间:2014-03-20 16:18:53

标签: ruby-on-rails ruby-on-rails-4

我有一个哈希变量,其中包含ActiveRecord搜索的结果,该搜索将迭代显示数据。我的代码(转录)就像这样:

 hvar=User.map{|x| {:name => x.name, :type => x.type, :section => x.section, 
       :result => (x.var1/x.var2).round(1)}}

哈希变量'hvar'将通过.inspect显示以下内容:

 [
    {:name=>'Michael', :type=>7, :section=>1, :result=>4.1},
    {:name=>'Seymour', :type=>4, :section=>1, :result=>3.9},
    {:name=>'Walter', :type=>2, :section=>1, :result=>6.3},
    {:name=>'Josephine', :type=>7, :section=>1, :result=>5.4},
    {:name=>'Carla', :type=>7, :section=>0, :result=>5.4}
 ]

到目前为止,非常好。

现在,我希望搜索一下结果哈希,例如所有那些类型7的记录,我不知道如何达到它。我发现你可以这样做:

mission=hvar.select{|k| k[:type] == 7}

但是它给了我0个结果,这对我来说很有意义,因为我认为它正在搜索哈希的“第一级”(即0,1,2,3)而不是其中的子哈希。

我怎样才能找到所有类型为7的记录?为此,我怎样才能在两个领域进行搜索?比如说,键入== 7和section == 1.

如果你想知道,我不是从ActiveRecord本身进行搜索,因为我必须遍历每一条记录并将它们安排在一个将这些数据与另一个表合并的数据透视表中。因此,为了提高效率,我想使用哈希而不是遍历ActiveRecord,目前它正在吐出大约1700个SQL查询。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您的代码写得正确。唯一可以真正回答的是

  

我怎么能在两个字段上搜索?比如说,键入== 7和section == 1.

现在和你现在一样,加上一个附加条件:

mission = hvar.select { |k| k[:type] == 7 && k[:section] == 1}