给出以下代码
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
答案 0 :(得分:1)
你必须从关系的另一端开始,因为find_in_batches
使用主键来确定从哪里开始搜索结果(SELECT ... FROM ... WHERE id&gt; N LIMIT 1000)< / p>
Sock.joins(:users).count
=> 1001
agg = []
Sock.joins(:users).find_in_batches{|g| agg += g}
agg.count
=> 1001