使用Chartkick,我的解决方案的第一部分工作,需要在图表中有多个条形图

时间:2015-07-02 17:46:14

标签: ruby-on-rails ruby chartkick

我的图表填充了项目中的小时数,我遇到的问题是显示每个项目名称而不必对其进行硬编码,然后分辨两者之间的小时数,说A有3个小时,B有4个I我试图在不同的栏上显示每一个。

我的观点如下:

<h3>Home</h3>

<%= javascript_include_tag "//www.google.com/jsapi", "chartkick" %>

<% @projects.each do |project| %>
<% @time_entries_list = project.time_entries.where(user_id:
@user.id).sort_by       &:work_date %>   
<% @time_entries_list.each do |time_item| %>
<% @time_total += time_item.hours %>
<% end %>
<% end %>
<%= bar_chart({"test" => @time_total, "test2" => @time_total}) %>

我的控制器看起来像这样

 class HomeController < ApplicationController
    def index
     @users = User.all
     @time_entries_list = [] 
     @time_total = 0 
    @user = current_user 
   @projects = Project.all 
  end
 end

希望我能找到一些帮助! 谢谢!

1 个答案:

答案 0 :(得分:0)

我不知道从哪里开始帮助您使用当前代码。您在视图中有很多逻辑应该在控制器中以及您要实例化的所有对象(@time_entries_list@users@user@time_total,{{1}不是真的需要(据我所见)

我建议在尝试采用类似这样的东西之前更好地理解ruby和rails,但是对于更好的方法,你可以试试这个:(注意我从来没有使用图表踢我只是去了文档)

控制器代码:

@projects

查看代码:

    class HomeController < ApplicationController
        def index   
          @time_entries = current_user.time_entries.joins(:project).
              select("sum(time_entries.hours) as total_hours,
                      projects.name as project_name").
              group("projects.name")
          @project_times = @time_entries.map do |time_entry|
                {
                  name: time_entry.project_name,
                  data: time_entry.total_hours
                }
            end + [{
                    name:'Total',
                    data: @time_entries.inject(0){|sum,entry| sum += entry.total_hours}
                  }]

        end
     end

我认为应该这样做。理论上,它应该为当前用户创建一个条形聊天,显示他们在每个项目上工作的时间以及他们在所有项目上工作的总时间,这似乎是您的最终目标,但我并非百分百确定。