0

我有我的图表填充项目中的小时数,我遇到的问题是显示每个项目名称而无需对其进行硬编码,然后辨别两者之间的小时数,比如 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

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

4

1 回答 1

0

我不确定从哪里开始帮助您处理当前代码。您在视图中有很多逻辑应该在控制器中,并且您正在实例化的所有对象(@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% 确定。

于 2015-07-02T19:00:41.670 回答