Rails: обновлять родительский атрибут, когда (has_many) дочерние записи обновляются / обновляются - PullRequest
2 голосов
/ 05 августа 2020

У меня следующая структура

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.

Есть ли способ обновить родительский атрибут (общее количество) здесь более производительным способом?

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