: выберите с помощью find_in_batches в рельсах - PullRequest
6 голосов
/ 08 сентября 2010

Как я могу включить предложение: select с find_in_batches.Следующее выдает ошибку «Mysql :: Error: Неизвестный столбец« users.id »в« списке полей »:.

Post.find_in_batches(:batch_size => 100, :select => "users.id, users.name, categories.name, posts.id", :include => [:user, :category]) do |group|
#stuff with group
end

Ответы [ 2 ]

26 голосов
/ 11 октября 2013

Итак, если вы планируете использовать find_in_batches, это, вероятно, означает, что вам нужно пройти через много записей, и вы вполне можете захотеть, чтобы вам только возвращались выбранные поля из БД.

В Rails3/4 вы можете связать find_in_batches с любым другим методом ActiveRecord :: Relation (или, по крайней мере, большинством ... Я не проверял их всех лично).

Это, вероятно, то, что вы ищете

User.select(:id).find_in_batches(:batch_size => 100) do |group|
   # do something with group... 
   # like print all the ids
   puts group.map(&:id)

end

Если вы попробуете это в консоли, он сгенерирует SQL следующим образом ...

 SELECT id FROM `users` WHERE (`users`.`id` > 895846) ORDER BY `users`.`id` ASC LIMIT 100

См. Дополнительную информацию здесь: http://api.rubyonrails.org/classes/ActiveRecord/Batches.html

0 голосов
/ 08 сентября 2010

Ваша жизнь с Rails будет намного проще, если вы просто получите все поля для каждой запрашиваемой модели, например так:

Post.find_in_batches(:batch_size => 100, :include => [:user, :category]) do |post|
   u = post.user
   c = post.category
   # do stuff
end

Урезанный список выбора, как и в вашем вопросе, предоставляет ограниченную базу данныхулучшение производительности, но в большинстве случаев недостаточно, чтобы стоить более грубого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...