【问题标题】:Using variables in an array passed to a def - Rails使用传递给 def 的数组中的变量 - Rails
【发布时间】:2010-12-10 17:31:41
【问题描述】:

我正在使用 Google 图表 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) %>

如何传递局部变量?

【问题讨论】:

    标签: ruby-on-rails arrays definition local-variables


    【解决方案1】:

    你得到什么错误?你应该可以这样称呼它:

    <%=
      pie_chart(
        [
          ["Light Cost", light_cost],
          ["Small Appliance Cost", sm_appl_cost]
        ],
        { :width => 550, :height => 200 }
      )
    %>
    

    我在哈希周围添加了{},只是为了让它更清晰明确。

    在这里使用#{var} 不是这样做的方法,因为这是在字符串中进行替换,例如"Here is the value: #{var}"

    【讨论】:

      【解决方案2】:

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

      实际上,如果仅使用 2 变量 @ 987654322@ 迭代器。所以你应该可以使用[["str1", light_cost], ["str2", sm_appl_cost]]{ 'str1'=&gt;light_cost, 'str2'=&gt;sm_appl_cost}

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-27
        • 1970-01-01
        • 2018-01-20
        • 1970-01-01
        • 2014-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多