Миграции используются для изменения схемы вашей базы данных с течением времени, вы не должны использовать миграции таким образом.
Прежде всего, пожалуйста, обновите ваш вопрос, ваш вопрос должен быть таким, потому что то, что вы спрашиваете сейчас, не имеет никакого смысла, и люди запутаются.
Теперь возвращаемся к теме
Вы должны обновить свою модель на транзакционной основе, а не запускать процесс для всех данных.Каждый раз, когда Элемент создается / обновляется, используйте обратный вызов для разделения
class Item < ActiveRecord::Base
belongs_to sale
after_commit :split
...
def split
self.sale.split_items
end
end
class Sale < ActiveRecord::Base
has_many items
...
def split_items
products_items = self.items.group_by(&:product_id)
products_items.each do |product_id, items|
if items > 1
quantity = items.sum(:quantity)
items.delete_all
Item.create(product_id: product_id, quantity:quantity)
end
end
end
end
Примечание Это не оптимальный способ сделать это, но он сделает свою работу.