轨。 如何从一个阵列到谷歌图表脚本传递值。(Rails. How to Pass values

2019-09-16 16:42发布

Rails应用程序。 我有一个项目和任务模型。 任务有一个列PROJECT_ID设置所属的项目,和几个完整性列表示在时间任务的完整性(所以我有一列“completeness_at_3hours”,“completeness_at_6hours”等),以显示从1到5级任务的完整性。

我现在需要绘制,与谷歌图表上的属于一个项目任务时的完整性。

在我的项目控制器我有

@tasks = Tasks.where("project_id = ?", params[:id])

所以,现在,我有选择的项目的任务,@tasks,我将如何包括在谷歌图表脚本的数据?

function drawChart() {

        var data = google.visualization.arrayToDataTable([
          ['Time', '<%= @task.name %>', '????????'],
          ['<%= @task.created_at %>',  <%= @task.zerohours %>, '?????????'],
          ['<%= @task.created_at + 3.hours %>',  <%= @task.threehours %>, '????????'],
          ['<%= @task.created_at + 6.hours %>',  <%= @task.sixhours %>, '????????'],
          ['<%= @task.created_at + 9.hours %>',  <%= @task.ninehours %>, '????????'],
          ['<%= @task.created_at + 12.hours %>',  <%= @task.twelvehours %>, '????????']
        ]);

这适用于只有一个任务(刚刚创建的),但我怎么传递给脚本包含在@tasks的所有数据?

我的意思是,在一个简单的表,我会用检索数据:

<% @tasks.each do |task| %>
<%= @task.threehours %>
<%= @task.sixhours %>
<%= @task.ninehours %>
<%= @task.twelvehours %>
<% end %>

但我怎么做同样的事情,但谷歌的图表里面的脚本?

非常感谢!!

Answer 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

此代码假定所有任务同时启动,并且您的数据库被称为“任务”。 此外,它最有可能相当粗糙并且可以使用一些改进。



文章来源: Rails. How to Pass values from an array to the google chart script.