defに渡された配列で変数を使用する-Rails
-
06-07-2019 - |
質問
GoogleチャートAPIを使用して、Railsアプリケーションで円グラフを生成しています。しかし、ローカル変数をヘルパーのdefに渡すのに問題があります。 defは[label、value]ペアの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 }
)
%>
明確かつ明確にするために、ハッシュの周りに {}
を追加しました。
&# code>。
他のヒント
そのコードは間違いなく数値を必要としますが、#{}
は文字列内で使用されない限りコメントを開始するだけで、そこに文字列は必要ありません。
そして実際、書かれたpie_chartは、あなたが言うように OR ハッシュの2D配列を使用するように見えます。 code> .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
を使用してみてください。
所属していません StackOverflow