Использование переменных в массиве, переданном в def - Rails
-
06-07-2019 - |
Вопрос
Я использую Google charts API для создания круговой диаграммы в своем приложении Rails. Тем не менее, у меня проблема с передачей локальных переменных в def в помощнике. Def принимает двумерный массив пар [label, value]. Это не нравится, когда я пытаюсь передать локальную переменную в качестве значения. Они рассчитываются заблаговременно и представлены в валютном формате. Помещение переменной в кавычки или в # {}
также не работает.
application_helper.rb
def pie_chart(data, options = {})
options[:width] ||= 250
options[:height] ||= 100
options[:colors] = %w(F5DD7E 0DB2AC FC8D4D FC694D FABA32 704948 968144 C08FBC ADD97E)
dt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-."
options[:divisor] ||= 1
options[:title] ||= "Energy Costs"
while (data.map { |k,v| v }.max / options[:divisor] >= 4096) do
options[:divisor] *= 20
end
opts = {
:cht => "p",
:chd => "e:#{data.map{|k,v|v=v/options[:divisor];dt[v/64..v/64]+dt[v%64..v%64]}}",
:chl => "#{data.map { |k,v| CGI::escape(k)}.join('|')}",
:chs => "#{options[:width]}x#{options[:height]}",
:chco => options[:colors].slice(0, data.length).join(','),
:chf => "bg,s,FFFFFF00",
:chtt => "#{options[:title]}"
}
Вызов def в представлении:
<%= pie_chart( [["Light Cost", #{light_cost}], ["Small Appliance Cost", #{sm_appl_cost}]], :width => 550, :height => 200) %>
Как передать локальные переменные?
Решение
Какую ошибку вы получаете? Вы должны быть в состоянии назвать это как:
<%=
pie_chart(
[
["Light Cost", light_cost],
["Small Appliance Cost", sm_appl_cost]
],
{ :width => 550, :height => 200 }
)
%>
Я добавил {}
вокруг хеша, чтобы сделать его более понятным и явным.
Использование # {var}
не способ сделать это здесь, потому что это для подстановки в строке, например, " Вот значение: # {var} " код>.
Другие советы
Таким образом, этот код определенно нуждается в числовых значениях, но # {}
просто начинает комментарий, если не используется внутри строки, и вам не нужна строка там.
И на самом деле, как было написано, pie_chart принимает либо 2D-массив, как вы говорите ИЛИ хэш, если его единственное использование с 2-переменной < code> .map итераторы. Таким образом, вы сможете использовать Вы должны убедиться, что эти местные жители числовые. Попробуйте использовать [[" str1 " ;, light_cost], [" str2 " ;, sm_appl_cost]]
или {'str1' = > light_cost, 'str2' = & GT;. sm_appl_cost} код> р>
.to_i
или .to_f
, если это не так.