1

J'ai deux modèles et l'article CatégorieRails, A et appartient à beaucoup, match toutes les conditions

class Article < ApplicationRecord 

    has_and_belongs_to_many :categories 

end 

Je veux obtenir des articles qui ont des catégories 1 et 2 associés.

Article.joins(:categories).where(categories: {id: [1,2]} ) 

Le code ci-dessus ne le fera pas parce que si un article de catégorie 1 ou 2 est associé alors il sera retourné et c'est pas le but. Les deux doivent correspondre.

Répondre

0

Vous pouvez interroger uniquement les articles de la première catégorie, qui sont également les articles de la deuxième catégorie.

Ça va être quelque chose comme ceci:

Article.joins(:categories) 
    .where(categories: { id: 1 }) 
    .where(id: Article.joins(:categories).where(categories: { id: 2 })) 

Notez qu'il peut être:

Category.find(1).articles.where(id: Category.find(2).articles) 

mais il fait des demandes supplémentaires et nécessite une plus grande attention aux cas où la catégorie ne peut pas être trouvé.