exacto! tengo algo así en otro proyecto:

    def hay_cambios_en_las_sarasas?
      sarasas.any?(&:changed?)
    end

    def sarasas_totales
      if hay_cambios_en_las_sarasas?

        # calcular la suma en base a los objetos en memoria
        sarasas.inject(totales) do |totales, sarasa|
          totales[sarasa.coso_id] += sarasa.cantidad and totales
        end

      else
        # usar la base de datos
        slots_de_cartas.group(:coso_id).sum(:cantidad)
      end
    end

en este ejemplo puntual están agrupados los totales, pero se saca eso y listo

/me, write once, paste anywhere