检索多个对象

0
视频
0
完成
0%
进度
0
分钟
0
完成
0%
进度

得到模型里的所有的对象,可以使用它的 all 这个方法 ..

User.all

返回的是一个集合 .. 如果模型里的记录少,使用这个方法还行,太多的话就不行了,因为记录可能会占用服务器的所有的内存 ..

可以用 find_each 这个方法,它会先检索一批记录,然后把这批记录一个一个的交给代码块去处理 .. 还有个 find_in_batches 方法,它也会先检索一批记录,然后把整批记录统一交给代码块去处理 ..

find_each

先试一下 find_each .. 使用 User 模型的 find_each 方法 .. 给它一个代码块 .. 加上一个参数是 user,表示用户 .. 在代码块的主体里,输出用户的 name 属性 ...

返回的就是 User 模型里的用户的名字 ... 注意这个方法对应的 SQL ...

SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1000

这里有一个 LIMIT,限制了检索的记录的数量,现在它的值是 1000,也就是 find_each,会先检索出 users 里的 1000 条记录,一条一条的处理它们,然后还有记录的话,会检索下一批记录,数量也是 1000 ...

这个批次的数量我们可以修改一下 ... 用一下 User 的 find_each ... 给它一个 batch_size 参数,它的值就是每批次的数量 .. 设置成 1 .. 再提供一个代码块 ... 一个 user 参数 ... 然后输出它的 name 属性 ..

这次你会发现 .. 这个方法会先检索出第一批记录,数量是 1 ... 输出用户的名字 .. 然后又会检索下一批记录,数量也是 1 ... find_each 会继续检索模型里的记录,直到最后一条为止 ...

你可能希望处理一部分记录,可以使用 :start 还有 :finish 设置开始还有结束的记录 .. User.find_each ... start 设置一下开始的位置 ... finish 设置一下结束的位置 .. .再用一下 batch_size .. 设置一下每批记录的数量 .. 提供一个代码块 ... user 参数表示用户 .. 输出它的 name 属性 ..

User.find_each(start: 2, finish: 3, batch_size: 1) do |user|

这样 find_each 会从第二条记录开始,到第三条结束 ... 每批记录的数量是 1 ...

检索多个对象《 Rails:查询接口 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点