在sql执行后得​​到切片结果

时间:2011-11-22 14:32:26

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我正在开发 Rails 应用。

执行 sql 命令之后,如下所示:

sql="select * from some_tbl;"
rslt = ActiveRecord::Base.connection.execute(sql)

如何从rslt获得切片结果?

我的意思是,例如,如果rslt.size是200,我想从第5个开始得到20个结果(类似于数组操作arr[5,20]),该怎么做?

4 个答案:

答案 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部分将为您介绍因为它涉及数据库的处理!