我正在使用Google图表API在我的Rails应用程序中生成饼图。但是,我在帮助器中将局部变量传递给def时遇到问题。 def采用[标签,值]对的2D数组。当我尝试将局部变量作为值传递时,它不喜欢它。这些是提前计算的,采用货币格式。将变量放在引号或#{} 中也不起作用。

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} 不是这里的方法,因为那是用于字符串中的替换,例如&quot;这是值:#{var}&quot;

其他提示

所以代码肯定需要数值,但是#{} 只是开始注释,除非在字符串中使用,并且你不需要字符串。

实际上,正如你所说的一个Hash,如果只使用它是2变量<,那么所写的pie_chart似乎会 一个二维数组<代码> .map 迭代器。所以你应该可以使用 [[&quot; str1&quot;,light_cost],[&quot; str2&quot;,sm_appl_cost]] {'str1'=&gt; light_cost,'str2' =&GT; sm_appl_cost}

但您确实需要确保这些本地人是数字的。如果不是,请尝试使用 .to_i .to_f

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top