我正在开发 Rails 应用。
执行 sql 命令之后,如下所示:
sql="select * from some_tbl;"
rslt = ActiveRecord::Base.connection.execute(sql)
如何从rslt
获得切片结果?
我的意思是,例如,如果rslt.size
是200,我想从第5个开始得到20个结果(类似于数组操作arr[5,20]
),该怎么做?
答案 0 :(得分:2)
尝试将rslt
转换为数组:
...
rslt.to_a[5,20]
答案 1 :(得分:2)
如果您不需要获取表的所有实例,则可以执行以下操作:
Model.offset(5).limit(20)
你应该读到它,它可能会有所帮助:http://guides.rubyonrails.org/active_record_querying.html#limit-and-offset
答案 2 :(得分:0)
从ActiveRecord::Base.connection.execute
返回的对象实际上是Array
,这意味着您可以使用rslt[5,20]
从第6个元素开始获取20个结果。
我还想指出您可以使用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
编辑:抱歉,它不适合你。直接从我的rails(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
答案 3 :(得分:-1)
您不需要在使用ActiveRecord
的rails中使用sql来创建,读取,更新和删除数据库中的条目。您应该阅读http://guides.rubyonrails.org/中的初学者指南,尤其是Model
部分将为您介绍因为它涉及数据库的处理!