У меня следующая структура
class Order < ActiveRecord::Base
has_many :order_lines, inverse_of: :order, validate: false, autosave: true
end
class OrderLine < ActiveRecord::Base
belongs_to :order, inverse_of: :order_lines, touch: true, counter_cache: :line_count
end
Я бы хотел, чтобы родительский атрибут (Order
) обновлялся при обновлении дочерних (OrderLine
) записей. Скажем, Order Total
должен быть обновлен при обновлении OrderLine
Цена / Количество.
Я мог бы добавить обратный вызов after_save/commit
на уровне OrderLine
ИЛИ добавить after_commit
обратный вызов (из-за touch: true
) на уровне Order
для вычисления и обновления total
.
Однако, когда количество строк очень велико (более 100), он выполняет обратный вызов для каждого обновления строки, которое имеет влияние на производительность. Кроме того, существуют потоки функций, в которых отдельные / несколько строк обновляются без обновления родительской записи (заказа). Поэтому мне также нужен обратный вызов на уровне строки, чтобы обновить общее количество в таком сценарии ios.
Есть ли способ обновить родительский атрибут (общее количество) здесь более производительным способом?