Почему мой JOIN все еще вызывает n + 1 выбор в активной записи? - PullRequest
0 голосов
/ 01 октября 2011

PortfolioEngine :: Загрузка портфеля (0,3 мс) ВЫБЕРИТЕ "portfolio_engine_portfolios". * ОТ "portfolio_engine_portfolios" ВНУТРЕННЕЕ СОЕДИНЕНИЕ "portfolio_engine_items" ВКЛ.portfolio_engine_portfolios.sort_index ASC, portfolio_engine_items.sort_index ASC

PortfolioEngine :: Элемент Load (0.2ms) ВЫБРАТЬ «portfolio_engine_items». * ИЗ «портфолио_engine_items« ГДЕ »portfolio_engine_items_port_engine_items"., sort_index asc

PortfolioEngine :: Item Load (0.3ms) ВЫБРАТЬ "portfolio_engine_items". * FROM "portfolio_engine_items" ГДЕ

PortfolioEngine :: Load Item (0.2ms) ВЫБРАТЬ "portfolio_engine_items". * ОТ "portfolio_engine_items" ГДЕ "portfolio_engine_items". "Portfolio_id" = 1 ORDER BY portfolio_engine_items.sort_index ASC, sort_index asc

n + 1 запускается путем циклического просмотра элементов каждого портфеля.

class Portfolio < ActiveRecord::Base
  has_many :items,
         order: "portfolio_engine_items.sort_index asc",
         autosave: true,
         inverse_of: :portfolio
  default_scope :order => 'portfolio_engine_portfolios.sort_index ASC'
end

class Item < ActiveRecord::Base
  belongs_to :portfolio
  belongs_to :client
  has_many :images,
           order: "sort_index ASC",
           autosave: true,
           inverse_of: :item
end

Понятия не имею, почему это происходит ....

@portfolios = PortfolioEngine::Portfolio.
    joins(:items).
    order("portfolio_engine_portfolios.sort_index ASC, portfolio_engine_items.sort_index ASC").
    all

1 Ответ

1 голос
/ 01 октября 2011

Вы пробовали includes вместо joins?

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