例如:

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/

    10-11 01:36