2. 获取多个数据
2.1 使用多个主键
Model.find(array_of_primary_key)
方法可接受一个由主键组成的数组,返回一个由主键对应记录组成的数组
代码
# Find the clients with primary keys 1 and 10.
client = Client.find([1, 10]) # Or even Client.find(1, 10)
# => [#<Client id: 1, first_name: "Lifo">, #<Client id: 10, first_name: "Ryan">]
2.2 take
Model.take(limit)
方法获取 limit
个记录,不考虑任何顺序
代码
Client.take(2)
# => [#<Client id: 1, first_name: "Lifo">,
#<Client id: 2, first_name: "Raf">]
2.3 first
Model.first(limit)
方法获取按主键排序的前 limit
个记录
代码
Client.first(2)
# => [#<Client id: 1, first_name: "Lifo">,
#<Client id: 2, first_name: "Raf">]
2.4 last
Model.last(limit)
方法获取按主键降序排列的前 limit
个记录
代码
Client.last(2)
# => [#<Client id: 10, first_name: "Ryan">,
#<Client id: 9, first_name: "John">]
3.批量获取多个对象
3.1 for_each
find_each
方法获取一批记录,然后分别把每个记录传入代码块。在下面的例子中,find_each
获取 1000 个记录,然后把每个记录传入代码块,直到所有记录都处理完为止
代码
User.find_each do |user|
NewsLetter.weekly_deliver(user)
end
3.2find_in_batches
find_in_batches
方法和 find_each
类似,都获取一批记录。二者的不同点是,find_in_batches
把整批记录作为一个数组传入代码块,而不是单独传入各记录。在下面的例子中,会把 1000 个单据一次性传入代码块,让代码块后面的程序处理剩下的单据
代码
# Give add_invoices an array of 1000 invoices at a time
Invoice.find_in_batches(include: :invoice_lines) do |invoices|
export.add_invoices(invoices)
end