0

プロジェクトの時間をグラフに入力しています。問題は、ハードコーディングせずに各プロジェクト名を表示し、2 つの間の時間を区別することです。たとえば、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は必要ありません (私が見る限り)

このようなことを試みる前に、ルビーとレールの両方をよりよく理解することをお勧めしますが、より良い方法論については、これを試すことができます:(私はチャートキックを使用したことがないことに注意してください。

コントローラーコード:

    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 に答える