Один из вариантов - преобразовать способ вычисления общей стоимости в выражение SQL, чтобы затем можно было заменить это выражение для любой ссылки, которая может понадобиться для «total_cost» в запросе. Это может быть довольно громоздким, если общая стоимость сложна для расчета или зависит от нескольких таблиц.
Если это возможно, это звучит так, как будто имеет смысл иметь атрибут total_cost
на вашей модели Article
. Вместо того, чтобы вычисление выполнялось, когда кто-то вызывает метод a.total_cost
, вы можете вычислить его при изменении модели с помощью обратного вызова и затем сохранить его. Например:
def before_save
self.total_cost = ... whatever ...
end
Это позволит вам использовать сумму и усреднить общие затраты. Это было бы гораздо эффективнее, чем получать статьи, рассчитывать общую стоимость каждой из них и затем агрегировать их. Это, вероятно, также будет более эффективным, чем вычисление его каждый раз, когда его запрашивают.
Это решение зависит от значения общей стоимости, не меняющего много. Если он все время меняется в зависимости от изменения различных объектов, то будет более неловко определять, когда должна измениться общая стоимость, и менее эффективно рассчитывать ее таким образом. Это, конечно, облегчит ваши расчеты.