0

Alors, disons que j'ai une classe d'utilisateurs, et je vais chercher une instance de l'utilisateur comme ceci:associations préchargement pour un modèle avec des requêtes

@user = User.first 

Et permet de dire que l'utilisateur has_many: messages et post has_many: commentaires . Je veux précharger les associations de posts et de commentaires à utiliser plus tard. Cela peut être réalisé en faisant: ActiveRecord::Associations::Preloader.new.preload(@user, {:posts => :comments}) Cependant, je veux aussi lancer quelques requêtes sur ce modèle et ses associations préchargées. Donc, fondamentalement, je veux quelque chose d'équivalent de User.where({:comments => {:post => {:topic => "math"}}).includes({:posts => :comments}).find(some_id). Cependant, puisque j'ai déjà chargé le modèle une fois, je ne veux pas le charger à nouveau. Y at-il un moyen de passer une clause where à l'instruction Preloader ci-dessus afin de créer une grande requête SQL au lieu de plusieurs plus petites? J'utilise Postgres, et d'après ce que je comprends, moins de requêtes en général signifie des temps de recherche plus rapides.

Répondre

0

utilisation

@user = User.includes(posts: :comments).first 

alors les requêtes suivantes se déroulera sur les postes pré-chargés et commentaires ou utiliser la version en cache de cette requête ...

0

Je veux vous demander s'il vous plaît préciser plus de détails que Je ne suis pas capable de comprendre correctement ce que vous voulez. autant que je suis en mesure de comprendre que je suis ici avec le code spécifiant utile S'il vous plaît mettre à jour le même si ce ne serait pas utile

J'ai un modèle

app/modèles/user.rb

class User < ApplicationRecord 
    has_many :posts 
    has_many :comments 
end 

app/modèles/post.rb

class Post < ApplicationRecord 
    belongs_to :user 
    has_many :comments 
end 

app/modèles/comment.rb

class Comment < ApplicationRecord 
    belongs_to :post 
    belongs_to :user 
end 

Ici, nous allons obtenir le tout le poste qui contient le sujet est les mathématiques avec l'utilisateur et les commentaires. afin que nous puissions écrire le code ci-dessous.

User.eager_load(:posts,:comments).where({posts: {topic:"math"} }) 

Ce résultat est basé sur tous les utilisateurs qui ont créé un post ayant des mathématiques sujet et avec des commentaires également.