首页 文章

Chartkick在没有groupdate的情况下将对象组合在一起,在Ruby中使用group_by

提问于
浏览
1

我正在使用最新的Chartkick 2.2.5和Rails 5.1.4,我试图绘制单位(车辆)及其状态(可用/不可用/等)并通过图表踢获得计数和图表 .

这是我的视图代码:

<%= column_chart Status.includes(:units).order("name asc").map {|s| {name: s.name, data: s.units.group_by{|u| u.name}.count}}, library: {backgroundColor: "#F8F8F8"} %>

这导致以下显示:

enter image description here

所以它迭代了状态,但没有显示每个状态的单位数 . 也许我的红宝石是错的,或者group_by可能不是我想要的 . 但我希望能得到一些帮助 .

我已经安装了groupdate,并按日/周/月绘制其他对象没有问题,但是这个特定的图需要按状态对每个单元进行原始计数,我不确定采用哪种方法 . 我将继续google并参考Ruby API文档,但在此期间我们将不胜感激 .

Update

我在这方面取得了一些进展,但如果将状态分配给多个单元(在此示例中为“停止运行”分配给两个单元),则单元显示两次,如图所示 . 这是我更新的代码:

<%= column_chart Status.joins(:units).order("name asc").map {|s| {name: s.name, data: s.units.group('units.name').count}}, library: {backgroundColor: "#F8F8F8"} %>

结果如下:

enter image description here

所以's somewhere in my ruby where I' m无法使结果明显或独特 . 我已经尝试在状态和单位上调用 uniq 并且它使用类的未定义方法错误并建议 group_by 作为替代而不是组 .

如果我将其中一个单位更改为其他单位未使用的其他单位,则图表会正常显示,所以我认为我的Ruby很笨拙,需要一些帮助 .

1 回答

  • 1

    我仍在研究状态和单位的排序,但是我能够通过在方法链中添加.uniq来获得截然不同的结果,如下所示:

    Status.joins(:units).uniq.map {|s| {name: s.name, data: s.units.group(:name).count}}
    

相关问题