2017-10-17 1 views
0

Je modèle simple de Product, Guide et Document qui sont comme ceci:Rails d'enregistrement actif interrogation association imbriquée existence

Product a beaucoup Guides et Guide a beaucoup Documents

La requête que je suis à la recherche est renvoyer le produit uniquement s'il contient un document.

Product.joins(:guides).distinct donne Product avec au moins un guide, mais comment ajouter un niveau imbriqué?

Répondre

2
Product.joins(guides: :documents).distinct 

En supposant que vos modèles ont mis en place les has_many associations, vos noms de tables sont standard, et qui devraient générer la requête:

SELECT DISTINCT "products".* FROM "products" 
INNER JOIN "guides" ON "guides"."product_id" = "products"."id" 
INNER JOIN "documents" ON "documents"."guides_id" = "guides"."id" 

(La requête varie en fonction de la saveur de SQL que vous êtes en utilisant; Ceci est pour Postgres.)