我怎样才能在Rails中执行类似find_in_batches_by_sql的操作

z5h*_*z5h 8 sql activerecord ruby-on-rails

find_in_batches不允许纯SQL(据我所见).
find_by_sql没有批量支持(据我所知).

那我该怎么做find_in_batches_by_sql呢?

SQL是令人讨厌的编程生成的东西,它指向第三方数据库,结果集可以返回数十万到数百万条记录.

我应该研究一下ActiveRecord的其他光标技巧吗?

谢谢.

Wiz*_*Ogz 6

更新为使用LIMIT和OFFSET的正确顺序

您总是可以将SQL分解为多个部分并执行类似的操作

Model.select("*").where("WHERE CLAUSE HERE").joins("JOIN CLAUSES HERE").find_in_batches {...}
Run Code Online (Sandbox Code Playgroud)

或者,如果你需要非常有趣的SQL东西,你可以使用偏移量并限制和循环,直到你用完结果.这是基本的想法:

offset = 0
limit = 1000

while(results)
  results = Model.find_by_sql("<your SQL here> LIMIT #{limit} OFFSET #{offset}")
  offset += limit  
  # Do stuff here
end
Run Code Online (Sandbox Code Playgroud)