Проблемы с нетерпеливой загрузкой в ​​Rails - PullRequest
1 голос
/ 14 апреля 2011

Я испытываю странное поведение во время загрузки связанных записей. Я указал необходимые отношения в «include», и весь материал загружается четырьмя запросами. Но когда я перебираю выбранные записи, Rails начинает выдавать запрос для каждого связанного объекта, чаще всего попадая в кеш. Я не смог воспроизвести эту проблему в тестовом приложении с подобной настройкой. Вот соответствующие части кода:

class Side < ActiveRecord::Base
  belongs_to :photo
  belongs_to :board
end

class Board < ActiveRecord::Base
  belongs_to :address
  has_many :sides
end

class Photo < ActiveRecord::Base
  has_many :sides
end

class Address < ActiveRecord::Base
  belongs_to :city
  has_many :boards
end

class City < ActiveRecord::Base
  has_many :addresses
end

q = Side.includes({:board => :address}, :photo).joins({:board => :address}, :projects).limit(50)
q.each {|s| s.photo}

Соединения для предикатов, которые будут добавлены позже.

1 Ответ

0 голосов
/ 16 апреля 2011

Я полагаю, это из-за того, что рельсы 'лениво загружаются' - поэтому, когда вы звоните Side.includes(...).limit(50), вы на самом деле не запрашиваете никаких записей.Думайте об этом, как о настройке scope для модели.

Я подозреваю, что если вы добавите .all в конец, он загрузит записи в одном запросе.

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