0

给定以下代码

class Things < ActiveRecord::Base
  belongs_to :user
  belongs_to :sock
end

class User < ActiveRecord::Base
  has_many :things
  has_many :socks, through: :things
end

class Sock < ActiveRecord::Base
  has_many :things
  has_many :users, through: :things
end

假设第一个用户有两只袜子,而所有其他用户都有一只袜子。总共有 1000 个用户和 1001 个袜子。您希望find_in_batches返回与正常选择相同数量的记录。

User.joins(:socks).count
=> 1001
agg = []
User.joins(:socks).find_in_batches{|g| agg += g}
agg.count
=> 1000
4

1 回答 1

2

您必须从关系的另一端开始,因为find_in_batches使用主键来确定从哪里开始搜索结果(SELECT ... FROM ... WHERE id > N LIMIT 1000)

Sock.joins(:users).count
=> 1001
agg = []
Sock.joins(:users).find_in_batches{|g| agg += g}
agg.count
=> 1001
于 2013-03-27T19:41:34.727 回答