has_many через объединения объединяет причины N + 1 - PullRequest
0 голосов
/ 15 июня 2019

У меня есть следующее приложение, которое загружает информацию с веб-сайтов.

class Website < ApplicationRecord
 has_many :details
 has_many :urls, through: :details
end

class Detail < ApplicationRecord
 belongs_to :website
 belongs_to :url
end

class Url < ApplicationRecord
 has_many :details
 has_many :websites, through: :details
end

websites = Websites.joins(:urls, :details).includes(:urls, :details).paginate(page: params[:page], per_page: 10)

Это типичное has_many через ассоциации. Однако, когда я пытаюсь объединить вывод JSON в сериализацию активной модели, я получаю проблему N + 1.

class WebsiteSerializer < ActiveModel::Serializer
 attributes :results

def results
  {websiteinfo: website_info_with_details}
end
def website_info_with_details
  object.detail.map do |k|
    k.attributes.merge(k.url.attributes)
  end
end

почему это вызывает N + 1, хотя, как вы можете видеть выше, я включаю обе таблицы выше? Когда я удаляю строку k.attributes.merge(k.url.attributes), проблема N + 1 исчезает, но я теряю информацию URL, отображаемую в моем фиде. какие-либо предложения, почему это происходит?

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