J'ai deux modèles: Item
et Tag
. Les deux ont un attribut de nom. Je veux trouver des articles marqués avec plusieurs tags.rails: Obtenez tous les éléments étiquetés x ET y ET z
class Item < ActiveRecord::Base
has_many :tags
validates_presence_of :name
end
class Tag < ActiveRecord::Base
belongs_to :item
validates_presence_of :name
end
Compte tenu de la liste des étiquettes d'identification, je peux assez facilement obtenir la liste des éléments marqués avec une étiquette ou l'autre:
# Find the items tagged with one or more of the tags on tag_ids
Item.all(:conditions => ['tags.id in (?)', tag_ids], :joins => :tags)
Si tag_ids
est {1,4}
, je reçois toutes les images étiqueté avec 1, ou 4, ou les deux.
Je veux savoir maintenant comment obtenir les photos qui sont marqués à la fois - 1 ET 4.
Je ne peux même pas imaginer le SQL qui est nécessaire ici.
J'ai le même problème ... Quelle coïncidence !! – fjuan
Je crois que le code vous donne aussi des "doublons" si un item est étiqueté avec les tags "both", ce qui peut ne pas être bon (use: group => 'items.id' pour qu'il ne renvoie pas de doublons). – rogerdpack