Конечно: это называется #select, или #inject, или любой другой метод -ect:
class Model1 < ActiveRecord::Base
has_many :model2
before_save :update_aggregate_value
private
def update_aggregate_value
# returns sum of unit_value for all active model2 instances
self.attr = model2.select(&:active?).map(&:unit_value).sum
end
end
class Model2 < ActiveRecord::Base
belongs_to :model1
end
Помните, что в этом случае БД будет не обработана, за исключением случаев, когда экземпляры model2 еще не были загружены. Также обратите внимание, что я использовал обратный вызов before_save вместо переопределения #save. Это «безопаснее», так как вы можете вернуть false и предотвратить сохранение.