私は長い間試しましたが、何も動作していないようです。人物モデルで私はclient_personとcase_historiesをインクルードしましたが、case_historiesをクエリするとn + 1のクエリが生成されます。(まだn + 1)
@client_records = @records.includes({person: [:client_person, :case_histories]})
: belongs_to :client_person, class_name: 'Client::Person' has_many :case_histories, through: :region_profiles, class_name: 'Admin::PeopleCaseHistory'
N + 1を生成クエリ:具体
@client_records.each do |record|
record.person.case_histories.select{ |hist| hist.case_type == 2}.first
end
、後に正しくリスト内のすべてのクライアントのためにcase_historiesをロードする(含む起因)、各クライアントのcase_historiesについて依然として1つずつ問い合わせを行います。
含んによって生成された最初のクエリ:
Admin::PeopleCaseHistory Load (46.9ms) SELECT "case_histories".* FROM "case_histories" WHERE "case_histories"."region_profile_id" IN (411, 16804, 572, 19506, 16539, 692, 4828)
以降のN + 1つのクエリ:
Admin::PeopleCaseHistory Load (29.5ms) SELECT "case_histories".* FROM "case_histories" INNER JOIN "region_profiles" ON "case_histories"."region_profile_id" = "region_profiles"."id" WHERE "region_profiles"."person_id" = $1 [["person_id", 9867]]
Admin::PeopleCaseHistory Load (34.3ms) SELECT "case_histories".* FROM "case_histories" INNER JOIN "region_profiles" ON "case_histories"."region_profile_id" = "region_profiles"."id" WHERE "region_profiles"."person_id" = $1 [["person_id", 430]]
はお知らせください! ありがとうございました
'includes 'を' references'に置き換えようとします – mdesantis
これはうまく動作しません –
繰り返しているN + 1クエリは何ですか? – Smudge