首页 文章

Rails ChartKick饼图计数

提问于
浏览
1

我有一个Rails应用程序,有两个模型和它们之间的关系 . 我使用ChartKick按Zipcode显示提供者订单的数量 .

order.rb Model

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

provider.rb Model

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 model

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

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

    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

    要调试该问题,您应该在 rails console 中运行和/或使用.to_sql来查看正在运行的查询 .

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

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

    SELECT COUNT(DISTINCT zipcode) AS count_zipcode_id
    

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

    @past_orders_chart.includes(:address).group(:zipcode).select('COUNT(*) AS count_zipcode_id')
    

相关问题