Rail的ActiveRecord find_each与DISTINCT选择

时间:2015-12-22 20:18:34

标签: ruby-on-rails activerecord

我希望获得我在数据库中拥有的所有独特电子邮件的列表,并使用 plot(h, labels = titles, sub = "") Error in graphics:::plotHclust(n1, merge, height, order(x$order), hang, : invalid dendrogram input 批量处理它们。

以下代码可以正常工作,直到它有超过1000条记录(批量大小)要处理。然后它在第1000条记录之后断开,并显示错误消息find_each

Primary key not included in the custom select clause

那么,我怎样才能将所有这些链接起来:

  • 我只需要一个特定的字段(电子邮件)
  • 我需要它们是独一无二的
  • 我需要一个条款
  • 我需要一个find_each

1 个答案:

答案 0 :(得分:1)

您必须使用循环limitoffset

手动执行此操作
batch_size = 1000
offset = 0

loop do
  emails = Tourist.where("DATE(created_at) = ?", Date.today-1).select('DISTINCT email').limit(batch_size).offset(offset)
  emails.each do |email| 
    # your stuff
  end 

  break if emails.size < batch_size
  offset += batch_size
end

当然,只有在请求将检索大量电子邮件时才需要这样做。否则,只需使用Tourist.where(condition).pluck('DISTINCT email').each { |email| your stuff }