Eager loading: A maneira certa de fazer as coisas

Estou executando o Ruby on Rails 3.1. Li os seguintes artigos e documentações sobreeager loading e gostaria de encontrar o caminho certo para fazer as coisas:

Eager Loading Associations [Documentação oficial]ActiveRecord :: Associações :: ClassMethods (consulte a seção "Ansioso carregamento de associações") [Documentação oficial]Eager loading [Artigo do blog]

O # 2 diz:

Observe que usar condições como Post.includes ([: autor,: comentários]). Where (['comments.approved =?', True]). All pode ter consequências não intencionai

O # 3 diz que essas consequências não intencionais são Not: os exemplos são praticamente os mesmos, por isso cito o texto exato do artigo do blog, mas você deve ter em mente a solução alternativa, não a implementação específica):

Esta consulta, como usaria um LEFT JOIN, também descartaria todas as postagens sem um comentário com a palavra “primeiro” em qualquer um dos comentários.

Ou seja, se houver objetos não "associados", o objeto "principal associado" não será carregado. É o que acontece quando tento usar o carregamento ansioso de adicionando alguma condição gostar.where(:category_relationships => {:user_id => @current_user.id}) no meuprevious question, mas não quero que isso aconteça.

Então (derrotista, porque eu provavelmente não posso usar o carregamento ansioso no meu caso, ondecondiçã não pode ser definido nohas_many instrução - observe que no código acima o@current_user.id é "definido dinamicamente", diferente dos exemplos presentes nos sites mencionados), Gostaria de saber se existem práticas / técnicas / estratégias para limitar as consultas ao banco de dados, pois tenho um "problema N + 1".

alvez essas práticas / técnicas / estratégias sejam implementáveis usando a estrutura Ruby on Rails em todos os . # 1 diz:

Mesmo que o Active Record permita que você especifique condições nas associações carregadas, assim como as junções, a maneira recomendada é usar as junçõe

O que e como resolver esse problema da maneira certa?

alvez uma solução seja recuperar e criar o que precisa ser carregado executando consultas de banco de dados específicas e separadas, mas o problema seriacomo "passar" / "associar" / "interpolar" os objetos "associados" recuperados ao objeto "principal associado", de modo que possam ser usados como "um carregamento ágil" Ou seja, como tornar possível (consulte o questão mencionada para obter mais informações) para usar códigos como@article.comments e obter apenas comentários que eu ansiosamente me carregou? Depois deme carregamento ansioso, épossíve / corrigi para fazer algo como@article.comments = my_eager_loaded_comments para "passar" / "associar" / "interpolar" comentários aos artigo

questionAnswers(4)

yourAnswerToTheQuestion