3

轨道应用程序。我有一个项目和一个任务模型。任务有一个列 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 %>

但是我如何在谷歌图表脚本中做同样的事情呢?

非常感谢!!

4

1 回答 1

3

据我所知,您想通过其他任务代替问号,对吗?如果是这样,我有一个解决方案。首先,您可能希望将代码包装在一个函数中:

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

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

于 2012-04-22T23:34:35.223 回答