Я вычисляю итоги на лету для проекта, но в настоящее время он требует большой базы данных:
def sub_total(package)
subtotal = 0.0
self.quote_items.order("area_id").each do |item|
subtotal += Unit.find(item.unit_id).highest_price(package)*item.quantity if item.unit
end
sprintf("%.2f", sub_total)
end
В модели блока:
def highest_price(package)
highest_price = 0
highest_id = 0
self.options.where("options.id IN (SELECT option_id FROM options_packages WHERE package_id = '#{package.id}')").each do |option|
if (option.price > highest_price)
highest_price = option.price
highest_id = option.id
end
end
Quote.add_margin highest_price
end
На каждой итерации запрашивает базу данных в методе Unit.find.
Как это можно оптимизировать? Буду признателен за любую помощь или совет, чтобы убрать это! В этом проекте используются Rails 3.0.9 и Ruby 1.8.9.