如何在Ruby中使用PG :: Result进行弹出?

时间:2015-06-19 21:12:38

标签: ruby pg

从pgsql数据库运行结果集中的pop我得到:

undefined method `pop' for #<PG::Result:0x0000000273dc08>

我想获得结果集的前5个,用它做一些事情,然后用下一个5再做一次。我不想运行我的查询两次,因为这是一个相当长的查询。

我如何在红宝石中这样做?

我正在运行ruby 2.1和rails 3.0。

2 个答案:

答案 0 :(得分:2)

问题是PGResult不是数组,而是一个对象。您需要使用to_a方法将其转换为数组。

答案 1 :(得分:1)

PG::ResultEnumerable,因此您可以在其上使用each_slice

your_pg_result.each_slice(5) do |array|
  # array is at most five rows from the result set
  # on each iteration so do whatever needs to be done
end

如果您需要区分迭代,则将with_index投入混合:

your_pg_result.each_slice(5).with_index do |array, i|
  # ...
end