Например:
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
# предоставить все sales_orders, которые доставляются клиенту
pa = Product.find(1)
pa.sales_orders.deliverable
# предоставить все sales_orders, для которых product_id равен 1 и может быть доставлен клиенту
pa.total_so_deliverable
Сам вопрос, который я собираюсь спросить: сколько раз фактически вычисляется SalesOrder.deliverable, с точек 1, 3 и 4, они вычисляются 3 раза, что означает 3 раза доступ к базе данных
так что наличие total_so_deliverable продвигает полную модель, но расширяет доступ к базе данных. В качестве альтернативы (в представлении) я мог бы выполнять итерацию при отображении контента, поэтому я получаю доступ к базе данных только 2 раза вместо 3 раз.
Есть ли решение проблемы победы / наилучшей практики для решения этой проблемы?