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

Using Chartkick, I got the first part of my solution working, need to have multiple bars in a chart

我的图表填充了一个项目的小时数,我遇到的问题是显示每个项目名称而无需硬编码,然后辨别两者之间的小时数,比如 A 有 3 小时,B 有4 我试图在不同的栏上显示每个。

我的视图如下所示:

<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

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

我不知道从哪里开始帮助您处理当前的代码。您在视图中有很多逻辑应该在控制器和您正在实例化的所有对象中(@time_entries_list@users@user@time_total@projects 并不是真的需要(据我所知)

我建议在尝试进行类似操作之前更好地理解 ruby 和 rails,但至于更好的方法,您可以尝试这样做:(请注意,我从未使用过图表踢我刚刚去了文档)

控制器代码:

    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

查看代码:

<%= bar_chart(@project_times) %>

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