Rails - ActiveRecord: ассоциация has_many не загружается при запросе с: includes - PullRequest
2 голосов
/ 20 апреля 2019

Пожалуйста, посмотрите на эту базовую настройку ассоциаций (Rails 4.2.1):

class Parent < ActiveRecord::Base
  has_many :kids
end

class Kid < ActiveRecord::Base
  belongs_to :school
end

class School < ActiveRecord::Base
end

С этими моделями следующий код работает как положено и сохраняет связь loaded:

parent = Parent.first
parent.kids.to_a
parent.association(:kids).loaded? # => true

Но : добавление .includes(:school) предотвращает загрузку / кэширование ассоциации по некоторым причинам

parent = Parent.first
parent.kids.includes(:school).to_a
parent.association(:kids).loaded? # => false

Просматривая журналы SQL, я вижу точно такой же запрос выбора, поэтому ожидаю, что ассоциация будет загружена / кэширована.

Вопрос

Почему это происходит?

ActiveRecord предварительно загружает / кэширует parent.kids в первом примере. Я хочу понять, почему это невозможно во втором примере с includes call?

Идеальный ответ для меня - ссылки на источники.

Спасибо за любую помощь

приписка

Обходное решение, которое я использую, устанавливает association.target вручную:

parent.association(:kids).target = parent.kids.includes(:school).to_a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...