我正在为一个项目动态计算总数,但它目前是数据库密集型的:
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。
答案 0 :(得分:2)
我对ruby不太熟悉,但我认为你可以直接从SQL获得最高价格。像这样:
SELECT MAX(price)
FROM options_packages
WHERE package_id = "#{package.id}"
GROUP BY package_id
答案 1 :(得分:1)
我已经更新了价格 - 这对于计算highest_price来说似乎更有效...?
highest_price = self.options.where("options.id IN (SELECT option_id FROM options_packages WHERE package_id = '#{package.id}')").order('price DESC').first.price
Quote.add_margin highest_price