Rails: tiene muchas asociaciones directas: busque con la condición AND, no con la condición OR
Tengo el siguiente método de consulta en mi modelo ActiveRecord:
def self.tagged_with( string )
array = string.split(',').map{ |s| s.lstrip }
select('distinct photos.*').joins(:tags).where('tags.name' => array )
end
Así, esto encuentra todos los registros que tienen etiquetas tomadas de una lista separada por comas y convertidas en una matriz.
Actualmente, esto coincide con los registros con CUALQUIER etiqueta coincidente: ¿cómo puedo hacer que funcione donde coincide con TODAS las etiquetas?
IE: si actualmente si ingreso: "azul, rojo", entonces obtengo todos los registros etiquetados con azul O rojo.
Quiero hacer coincidir todos los registros etiquetados con azul Y rojo.
Sugerencias?
- EDITAR -
Mis modelos son así:
class Photo < ActiveRecord::Base
...
has_many :taggings, :dependent => :destroy
has_many :tags, :through => :taggings
...
def self.tagged_with( string )
array = string.split(',').map{ |s| s.lstrip }
select('distinct photos.*').joins(:tags).where('tags.name' => array )
end
...
end
class Tag < ActiveRecord::Base
has_many :taggings, :dependent => :destroy
has_many :photos, :through => :taggings
end
class Tagging < ActiveRecord::Base
belongs_to :photo
belongs_to :tag
end
Una etiqueta tiene dos atributos: ID y Nombre (cadena).