脚本中的Ruby代码无法正常工作

时间:2012-12-05 08:27:17

标签: javascript ruby-on-rails ruby ruby-on-rails-3

我的谷歌饼图代码是

var data = google.visualization.arrayToDataTable([
          ['Task', 'Hours per Day'],
          ["Work",     50],
          ["Eat",      20],
          ["Commute",  20],
          ["Watch TV", 5],
          ["Sleep",    5]
        ]);

我的代码是(<%= @datas.map { |d| [d.name, d.value] }.inspect %>) 给出了结果

([["apple", "10"], ["orange", 20], ["banana", 30], ["grapes", 80], ["papaya", 44]])

当我将此结果直接放入我的谷歌饼图代码中时,就像这样

  var data = google.visualization.arrayToDataTable([["apple", "10"], ["orange", 20], ["banana", 30], ["grapes", 80], ["papaya", 44]])

然后它完美地运作。 但直接保持

var data = google.visualization.arrayToDataTable(<%= @datas.map { |d| [d.name, d.value] }.inspect %>)

不起作用。这可能是背后的原因。 ruby代码是否有一些合成来保持在内部或我在哪里做错了?

3 个答案:

答案 0 :(得分:1)

怎么样?
(<%= @datas.map { |d| [d.name, d.value] }.to_json.html_safe -%>)

答案 1 :(得分:1)

这有用吗:

@datas = {:apple => 10, :orange => 20, :banana => 30}
@datas.map { |name, value| [name.to_s, value] }
# => [["apple", 10], ["orange", 20], ["banana", 30]] 

所以只需写出:&lt;%= @ datas.map {| name,value | [name.to_s,value]}%&gt;

答案 2 :(得分:-1)

你试试这个..你根据这个改变你的代码

 var data = google.visualization.arrayToDataTable(<%= make_a_chart %>);

并将其放在相应的帮助器中:

 def make_a_chart
  result = []
  result.push make_labels, 
          make_data( 0, "zerohour" ), 
          make_data( 3, "threehours" ),
          make_data( 6, "sixhours" ),
          make_data( 9, "ninehours" ),
          make_data( 12, "twelvehours" )
          return result
          end

  def make_labels
     y = ["Time"]
     for task in Task.all do
     y.append task.name
     end
     return y
  end

 def make_data( time, completeness )
    y = Task.first.created_at + time
      for task in Task.all do
      y.append task[completeness]
   end
 return y
 end