2011-09-16 64 views
0

我在使用可用代碼here(GitHub存儲庫here)來生成熱圖/雲。Ruby/Rails:無法讓Bantik的熱圖代碼正常工作

我遇到了很多的NoMethodErrors和其他問題,以防止頁面被渲染。在頁面的兩倍或三倍處做了渲染,雲無法正常顯示。我將不勝感激任何和所有的幫助,讓我可以玩這個代碼。

小時中的錯誤是:

undefined method `each_pair' for "Many":String 

這是引用我的觀點:

<h1>Title</h1> 
. 
. 
. 
<% stylesheet_link_tag "custom" %> 
<%= heatmap({"Foo" => 13, 
    "Bar" => 15, 
    "Trouble" => 5, 
    "Braids" => 1, 
    "Something" => 9, 
    "Else" => 13, 
    "Many" => 20,   <---- 
    "Zombies" => 7, 
    "nothing" => 0}) %> 

我直接傾倒測試哈希到視圖,因爲我得到一個:

undefined method `keys' for nil:NilClass 

爲了完整起見,這是我的ApplicationHelper(定義了熱圖方法):

module ApplicationHelper 
    def heatmap(histogram={}) 

    content_tag(:div, :class => "heatmap") 

    histogram.keys.sort{|a,b| histogram[a] <=> histogram[b]}.reverse.each do |k| 
     next if histogram[k] < 1 
     _max = histogram_max(histogram) * 2 
     _size = element_size(histogram, k) 
     _heat = element_heat(histogram[k], _max) 

     content_tag(:span, content_tag(:class => "heatmap_element", :style => "color: ##{_heat}#{_heat}#{_heat}; font-size: #{_size}px;"), "#{k}") 
    end 

    content_tag(:br, :style => "clear: both;") 
    end 

    def histogram_max(histogram) 
    histogram.map{|k,v| histogram[k]}.max 
    end 

    def element_size(histogram, key) 
    (((histogram[key]/histogram.map{|k,v| histogram[k]}.sum.to_f) * 100) + 5).to_i 
    end 

    def element_heat(val, max) 
    sprintf("%02x" % (200 - ((200.0/max) * val))) 
    end 
end 

我將代碼從存儲庫中取出並用於幫助器中。我已將代碼更改爲使用content_tags,因爲該應用程序正在轉義HTML代碼並將其打印在網站上。

回答