Активная загрузка ассоциаций для экземпляров ActiveModel в Rails

В RoR это довольно распространенная ошибка, когда новички загружают класс и ассоциации, подобные этому # Решение для нетерпеливой загрузки

# The bellow generates an insane amount of queries
# post has many comments
# If you have 10 posts with 5 comments each
# this will run 11 queries 
posts = Post.find(:all)
posts.each do |post|
  post.comments
end

Решение довольно простое для нетерпеливой загрузки

# should be 2 queries
# no matter how many posts you have
posts = Post.find(:all, :include => :comments) # runs a query to get all the comments for all the posts
posts.each do |post|
  post.comments # runs a query to get the comments for that post
end

Но что, если вы не имеют доступа к методам класса, а имеют доступ только к набору методов экземпляра.

Тогда вы застряли с отложенной загрузкой с интенсивным запросом.

Есть ли способ минимизировать количество запросов, чтобы получить все комментарии для коллекции сообщений из коллекции экземпляров?

Дополнение для ответа (также добавлено в код выше)


Итак, чтобы нетерпеливая загрузка из того, что я вижу в rdoc для рельсов, является методом класса в любом расширении ActiveRecord :: Associations, проблема в том, что у вас нет возможности использовать метод класса , поэтому вам нужно использовать какой-то метод экземпляра

. Пример кода того, что я думаю, будет выглядеть примерно так:

post = Posts.find(:all)
posts.get_all(:comments) # runs the query to build comments into each post without the class method.
12
задан austinbv 19 March 2013 в 23:42
поделиться