Я играю с кодом, доступным здесь (репозиторий GitHub здесь ), чтобы создать тепловую карту / облако.
Я сталкиваюсь с большим количеством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 (где определен метод heatmap):
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 и печатало его на сайте.