has_many通过关联合并导致N + 1

时间:2019-06-15 02:01:43

标签: ruby-on-rails ruby

我有以下Rails应用,可获取网站信息。

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问题消失了,但是我丢失了Feed中显示的网址信息。有什么建议为什么会发生这种情况?

0 个答案:

没有答案