Rails + ChartKick饼图计数

时间:2015-10-11 15:55:21

标签: ruby-on-rails charts chartkick

我有一个带有两个模型的Rails应用程序以及它们之间的关系。我使用ChartKick按邮政编码显示提供者订单的数量。

order.rb模型

class Order < ActiveRecord::Base
belongs_to :user
belongs_to :provider
belongs_to :address

provider.rb模型

class Provider < ActiveRecord::Base
  belongs_to :user
  has_many :orders

def past_orders_chart
    Order.where(:provider_id => self.id).where(:status => "2")
end

address.rb模型

class Address < ActiveRecord::Base
   belongs_to :user
   has_many :orders 

past_orders.html.erb

<%= pie_chart @past_orders_chart.includes(:address).group(:zipcode).sum(:zipcode) %>

Here is how the chart looks using 'sum':

问题在于根据上述命令对zipcodes进行求和。

如果我将命令更改为'count'而不是'sum',它会显示图形但只计算邮政编码的唯一出现次数。

 pie_chart  =@past_orders_chart.includes(:address).group(:zipcode).count(:zipcode)

Here is how the chart looks using 'count':

使用'sum'可以直观地生成正确的饼图(以图表中显示的百分比表示。

所以问题是如何让图表列出邮政编码在数据集中出现的总次数? 我尝试发布第三个示例屏幕截图但被SO阻止。

谢谢,

大卫

2 个答案:

答案 0 :(得分:0)

我把它移到模型中并且能够用以下方法解决它:

def past_orders_chart

    Order.where(:provider_id => self.id).where(:status => "2").joins(:address).group(:zipcode).count

end

然后从控制器调用该方法为@past_orders_chart并将其传递给视图:

 <%= pie_chart @past_orders_chart, :library => {is3D: true } %>

答案 1 :(得分:-1)

要调试该问题,您应该在Vec3 mainCubePos = mainCube.getPos(); childCubes.add(new SmallChildCube(new Vec3(mainCubePos.x, mainCubePos.y, mainCubePos.z)); 中运行和/或使用.to_sql来查看正在运行的查询。

这不是您标记的图表/ chartkick问题。

使用rails console将以下内容添加到SELECT子句中:

count

因此,如果您不计算zipcode的不同值,则应将其替换为

SELECT COUNT(DISTINCT zipcode) AS count_zipcode_id