Причина, по которой ваш текущий код задачи rake, похоже, ничего не возвращает, заключается в том, что ваш метод UpdateManyPost.new.call
не принимает блок. Он вызывается, но ваш блок с response
вообще не используется.
Чтобы код задачи rake работал так, как он у вас есть, вам нужно, чтобы UpdateManyPost#call
принимал аргумент блока , и перебирать каждый post
в posts
, давая результат выполнения UpdateAPost#call
:
# service/update_many_post.rb
class UpdateManyPost
def call(&block)
posts.each do |post|
response = UpdateAPost.new(post: post).call
yield response
end
end
...
end
Еще лучше было бы использовать posts.find_each
, пакетную утилиту, которую предлагает ActiveRecord, которая автоматически разбивает запрос на страницы с помощью LIMIT и OFFSET, чтобы загружать в память только 1000 результатов за раз. По сути, он взаимозаменяем с posts.each
; он будет перебирать все результаты, он просто автоматически обрабатывает пакетирование за вас.