Моя среда разработки находится на Rails 4.1 и postgresql.
У меня есть 3 модели с has_many через отношения:
class Item < ActiveRecord::Base
has_many :item_parts
has_many :parts, through: :item_parts
end
class Part < ActiveRecord::Base
has_many :item_parts
has_many :items, through: :item_parts
end
class ItemPart < ActiveRecord::Base
belongs_to :item
belongs_to :part
end
Таблица соединения item_parts имеет атрибут unit_count для отслеживания количества частей, содержащихся в элементе.
Когда в представлении я перебираю все части определенного элемента, мне также нужно получить значение unit_count из таблицы соединений.
Это дает мне проблему с запросом n + 1.
Я попытался загрузить таблицу соединений:
item.parts.includes(:item_parts)
ItemPart Load (0.5ms) SELECT "item_parts".* FROM "item_parts" WHERE "item_parts"."part_id" IN (24, 12, 3, 26)
но когда после того, как я это сделаю:
part.item_parts.where(item_id: item.id).first.unit_count
Я получил следующий запрос sql для каждой части; нетерпеливая загрузка не сработала
ItemPart Load (0.5ms) SELECT "item_parts".* FROM "item_parts" WHERE "item_parts"."part_id" = $1 AND "item_parts"."item_id" = $2 [["part_id", 24], ["item_id", 18]]
Какие-либо предложения?