Hace poco tuve la necesidad de crear una nube de tags con Rails, y la manera más sencilla que encontré está explicada en esta entrada en Juixe TechKnow.

Si seguís el Post, lo primero que hace es añadir un método al modelo Tag para acceder a los datos. En mi caso, como prefiero no acceder a los datos desde el modelo, sino desde un controlador, o un helper, lo modifiqué para que el helper que elige el tamaño del tag, fuera el que directamente cargara el listado, liberando al modelo de esa carga:

app/helpers/application_helper.rb:

def tag_cloud(classes)
  tags = Tag.find(:all, 
          :order => "count DESC, name", 
          :limit => 100).sort_by { |tag| tag.name.downcase }

  max, min = 0, 0
  tags.each { |t|
    max = t.count.to_i if t.count.to_i > max
    min = t.count.to_i if t.count.to_i < min
  }
  divisor = ((max - min) / classes.size) + 1
  tags.each { |t|
    yield t.name, classes[(t.count.to_i - min) / divisor]
  }
end

Por lo demás, es una manera sencilla de crear una nube de tags, y con pequeñas modificaciones, no tiene por qué ser necesariamente de «Tags», sino que la podemos crear de cualquier entidad que tengamos.