例如:
class Product
has_many :sales_orders
def total_items_deliverable
self.sales_orders.each { |so| #sum the total }
#give back the value
end
end
class SalesOrder
def self.deliverable
# return array of sales_orders that are deliverable to customer
end
end
SalesOrder.deliverable
#give所有可交付给客户的sales_orders pa = Product.find(1)
pa.sales_orders.deliverable
#give product_id为1且可交付给客户的所有sales_orders pa.total_so_deliverable
我要问的问题是:SalesOrder.deliverable实际计算的次数是多少次,从第1,3和4点开始,计算3次,这意味着3次访问数据库
所以有total_so_deliverable正在推广胖模型,但更多的数据库访问。或者(在视图中)我可以在显示内容时进行迭代,因此我最终只访问数据库2次而不是3次。
对这类问题有什么双赢解决方案/最佳实践?
答案 0 :(得分:1)
查看您的环境日志(例如 log / development.log ),如果查询是您将看到的缓存:
CACHE (0.0ms) SELECT * FROM `widgets`....
或强>
Widget Load (0.4ms) SELECT * FROM `widgets`....
用于数据库查询。