我正在开发一个Rails应用程序。SQL执行后得到分片结果
我执行后SQL命令类似以下内容:
sql="select * from some_tbl;"
rslt = ActiveRecord::Base.connection.execute(sql)
从rslt
我怎样才能得到切片的结果吗?我的意思是,例如,如果rslt.size
是200,我想从第5个开始得到20个结果(这与阵列操作arr[5,20]
一样),该怎么做呢?
我正在开发一个Rails应用程序。SQL执行后得到分片结果
我执行后SQL命令类似以下内容:
sql="select * from some_tbl;"
rslt = ActiveRecord::Base.connection.execute(sql)
从rslt
我怎样才能得到切片的结果吗?我的意思是,例如,如果rslt.size
是200,我想从第5个开始得到20个结果(这与阵列操作arr[5,20]
一样),该怎么做呢?
尝试rslt
转换为数组:
...
rslt.to_a[5,20]
您不需要在rails中使用sql来使用ActiveRecord
来创建,读取,更新和删除数据库中的条目。你应该阅读从http://guides.rubyonrails.org/的初学者指南,特别是Model
部分将因为它处理数据库而受到干扰!
对象从ActiveRecord::Base.connection.execute
返回实际上是一个Array
这意味着你可以使用rslt[5,20]
获得20个结果开始在第6元。
我还想指出,您可以使用find_in_batches
这是一个由ActiveRecord提供的API。
的API页面上给出的例子是:
Person.where("age > 21").find_in_batches do |group|
sleep(50) # Make sure it doesn't get too crowded in there!
group.each { |person| person.party_all_night! }
end
编辑:对不起它不为你工作。从我的轨道直接(3.0.10)控制台
ruby-1.8.7-p299 :006 > sql = "select * from domains"
=> "select * from domains"
ruby-1.8.7-p299 :007 > ActiveRecord::Base.connection.execute(sql).class
=> Array
ruby-1.8.7-p299 :008 > ActiveRecord::Base.connection.execute(sql).length
=> 18
ruby-1.8.7-p299 :010 > ActiveRecord::Base.connection.execute(sql)[5,20].length
=> 13
如果您不需要取表的所有情况下,你可以这样做:
Model.offset(5).limit(20)
你应该阅读,它会可能有帮助:http://guides.rubyonrails.org/active_record_querying.html#limit-and-offset
嗨,我知道这一点。我有一个特殊的情况来使用它。谢谢你,但你的回答并没有涉及我所问的 – Mellon
对不起,但你的问题表明你正在尝试做一些简单的SQL与原生的SQL而不是有效的记录。 – davidb