Acts as Taggable on Steroids: tag cloud rhtml + view helper
controller layout (base) stylesheet update
<%= stylesheet_link_tag 'scaffold', 'tag_cloud' %>
create stylesheet, put it in ./public/, name it tag_cloud.css or similar
/* tag_cloud styles*/ .nube1 {font-size: 1.0em;} .nube2 {font-size: 1.2em;} .nube3 {font-size: 1.4em;} .nube4 {font-size: 1.6em;} .nube5 {font-size: 1.8em;} .nube6 {font-size: 2.0em;}
partial template call
TAG CLOUD<br/> <%= render(:partial => "shared/article_tag_cloud", :locals => {:tags => @tags}) %>
view template code, as a partial or within index/show action template
<% # For our purposes, have this filter the list of articles to those with the chosen tag tag_cloud true, tags, %w(nube1 nube2 nube3 nube4 nube5) do |name, css_class| %> <%= link_to name, tag_path(name), class => css_class # links to Tag resource, with tag name as 'id' %> <% end %>
helper code
def tag_cloud(active, tags, classes) if !active then return end max, min = 0, 0 unless tags.empty? tags.sort! {|x,y| y.count <=> x.count} max = tags.first.count min = tags.last.count end divisor = ((max - min) / classes.size) + 1 tags.each { |t| yield t.name, classes[(t.count.to_i - min) / divisor] } end