Ruby on rails 使用Chartkick,我得到了解决方案的第一部分,需要在一个图表中有多个条形图
我用图表填充一个项目中的小时数,我遇到的问题是显示每个项目名称而不必硬编码,然后区分两者之间的小时数,比如a有3个小时,B有4个小时,我试图在不同的条上显示每个项目名称 我的观点是这样的:Ruby on rails 使用Chartkick,我得到了解决方案的第一部分,需要在一个图表中有多个条形图,ruby-on-rails,ruby,chartkick,Ruby On Rails,Ruby,Chartkick,我用图表填充一个项目中的小时数,我遇到的问题是显示每个项目名称而不必硬编码,然后区分两者之间的小时数,比如a有3个小时,B有4个小时,我试图在不同的条上显示每个项目名称 我的观点是这样的: <h3>Home</h3> <%= javascript_include_tag "//www.google.com/jsapi", "chartkick" %> <% @projects.each do |project| %> <% @time_e
<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}) %>
主页
@总时间,“test2”=>@time\u-total})%>
我的控制器是这样的
class HomeController < ApplicationController
def index
@users = User.all
@time_entries_list = []
@time_total = 0
@user = current_user
@projects = Project.all
end
end
class HomeController
希望我能找到一些帮助!
谢谢大家! 我不确定从哪里开始帮助您处理当前代码。视图中有很多逻辑应该在控制器中,并且您正在实例化的所有对象(
@time\u entries\u list
,@users
,@user
,@time\u total
,@projects
)实际上并不需要(就我所见)
我建议在尝试采用类似的方法之前更好地理解ruby和rails,但对于更好的方法,您可以尝试以下方法:(注意,我从未使用过chart kick,我只是查看了文档)
控制器代码:
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
class HomeController
查看代码:
<%= bar_chart(@project_times) %>
我认为应该这样做。理论上,它应该为当前用户创建一个酒吧聊天,显示他们在每个项目上工作的时间以及他们在所有项目上工作的总时间,这似乎是你的最终目标,但我不是100%确定。这起作用了,我现在知道为什么了,非常感谢。我正在实习,正在学习,但谢谢谢谢你this@Weisbrod22没有比做更好的学习方法了。很高兴我能帮上忙。请记住,尤其是在创建图表时,只需选择您需要的确切数据,并让SQL完成繁重的工作。此外,根据经验法则,视图不必做比显示数据更多的事情,控制器只需获取信息和mo戴尔应该储存和供应它。我会记住,在我前进的过程中,非常感谢你们!