Рад, что тебе нравится Киба!
Я собираюсь сделать тебя счастливым, заявив, что твое понимание неверно.
Строки приведены и обработаны один за другим в Кибе.
Чтобы увидеть, как все работает, я предлагаю вам попробовать этот код:
class MySource
def initialize(enumerable)
@enumerable = enumerable
end
def each
@enumerable.each do |item|
puts "Source is reading #{item}"
yield item
end
end
end
class MyDestination
def write(row)
puts "Destination is writing #{row}"
end
end
source MySource, (1..10)
destination MyDestination
Запустите это, и вы увидите, что каждый элемент прочитан, а затем записан.
Теперьв вашем конкретном случае - то, что выше, означает, что вы можете реализовать свой источник следующим образом:
class ActiveRecord
def initialize(model:)
@model = model
end
def each
@model.find_each do |record|
yield record
end
end
end
, тогда вы можете использовать его следующим образом:
source ActiveRecordSource, model: Person.where("age > 21")
(Вы также можете использовать find_in_batches
если вы хотите, чтобы каждая строка представляла собой массив из нескольких записей, но это, вероятно, не то, что вам здесь нужно).
Надеюсь, это правильно ответит на ваш вопрос!