Как мы узнаем, является ли запрос кешем или получен из базы данных? - PullRequest
4 голосов
/ 05 июня 2010

Например:

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
  1. SalesOrder.deliverable # предоставить все sales_orders, которые доставляются клиенту
  2. pa = Product.find(1)
  3. pa.sales_orders.deliverable # предоставить все sales_orders, для которых product_id равен 1 и может быть доставлен клиенту
  4. pa.total_so_deliverable

Сам вопрос, который я собираюсь спросить: сколько раз фактически вычисляется SalesOrder.deliverable, с точек 1, 3 и 4, они вычисляются 3 раза, что означает 3 раза доступ к базе данных

так что наличие total_so_deliverable продвигает полную модель, но расширяет доступ к базе данных. В качестве альтернативы (в представлении) я мог бы выполнять итерацию при отображении контента, поэтому я получаю доступ к базе данных только 2 раза вместо 3 раз.

Есть ли решение проблемы победы / наилучшей практики для решения этой проблемы?

1 Ответ

1 голос
/ 07 июня 2010

Посмотрите в журнале вашей среды (например, log / development.log ), если запрос представляет собой кеш, вы увидите:

CACHE (0.0ms)   SELECT * FROM `widgets`....

или

Widget Load (0.4ms)   SELECT * FROM `widgets`....

для запроса к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...