rails 查询(2)

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

相关推荐