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).

Respuestas a la pregunta(3)

Su respuesta a la pregunta