从pgsql数据库运行结果集中的pop我得到:
undefined method `pop' for #<PG::Result:0x0000000273dc08>
我想获得结果集的前5个,用它做一些事情,然后用下一个5再做一次。我不想运行我的查询两次,因为这是一个相当长的查询。
我如何在红宝石中这样做?
我正在运行ruby 2.1和rails 3.0。
答案 0 :(得分:2)
问题是PGResult
不是数组,而是一个对象。您需要使用to_a
方法将其转换为数组。
答案 1 :(得分:1)
PG::Result
为Enumerable
,因此您可以在其上使用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