例如:
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
#提供所有可交付给客户的销售订单 pa = Product.find(1)
pa.sales_orders.deliverable
#给所有product_id为1且可交付给客户的sales_orders pa.total_so_deliverable
我要问的重点是:实际计算了多少次 SalesOrder.deliverable,从第 1、3 和 4 点开始,它们被计算了 3 次,这意味着对数据库的 3 次访问
所以拥有 total_so_deliverable 是在推广一个胖模型,但更多的数据库访问。或者(在 View 中)我可以在显示内容时进行迭代,所以我最终只访问数据库 2 次而不是 3 次。
此类问题的任何双赢解决方案/最佳实践?
最佳答案
如果查询是缓存,请查看您的环境日志(例如 log/development.log ),您会看到:
CACHE (0.0ms) SELECT * FROM `widgets`....
或
Widget Load (0.4ms) SELECT * FROM `widgets`....
用于数据库查询。
关于ruby-on-rails - 我们如何知道查询是缓存还是从数据库中检索?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2978960/