Rails + ChartKick 饼图计数
Rails + ChartKick Pie Chart Counting
我有一个 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':
问题是根据上述命令对有意义的邮政编码求和。
如果我将命令更改为 'count' 而不是 'sum',它会显示图表但只计算邮政编码的唯一出现次数。
pie_chart =@past_orders_chart.includes(:address).group(:zipcode).count(:zipcode)
Here is how the chart looks using 'count':
使用 'sum' 在视觉上生成正确的饼图(根据图表中显示的百分比。
所以问题是如何让图表列出邮政编码在数据集中出现的总次数? 我尝试 post 第三个示例屏幕截图,但被 SO 阻止了。
谢谢,
大卫
要调试该问题,您应该 运行 在 rails console
and/or 中都使用 .to_sql 来查看正在执行的查询是什么 运行 .
这不是您标记的 charts/chartkick 问题。
使用 count
将以下内容添加到您的 SELECT 子句中:
SELECT COUNT(DISTINCT zipcode) AS count_zipcode_id
因此,如果您不想计算邮政编码的不同值,则应将其替换为
@past_orders_chart.includes(:address).group(:zipcode).select('COUNT(*) AS count_zipcode_id')
我将其移至模型中并能够通过以下方法解决:
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 } %>
我有一个 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':
问题是根据上述命令对有意义的邮政编码求和。
如果我将命令更改为 'count' 而不是 'sum',它会显示图表但只计算邮政编码的唯一出现次数。
pie_chart =@past_orders_chart.includes(:address).group(:zipcode).count(:zipcode)
Here is how the chart looks using 'count':
使用 'sum' 在视觉上生成正确的饼图(根据图表中显示的百分比。
所以问题是如何让图表列出邮政编码在数据集中出现的总次数? 我尝试 post 第三个示例屏幕截图,但被 SO 阻止了。
谢谢,
大卫
要调试该问题,您应该 运行 在 rails console
and/or 中都使用 .to_sql 来查看正在执行的查询是什么 运行 .
这不是您标记的 charts/chartkick 问题。
使用 count
将以下内容添加到您的 SELECT 子句中:
SELECT COUNT(DISTINCT zipcode) AS count_zipcode_id
因此,如果您不想计算邮政编码的不同值,则应将其替换为
@past_orders_chart.includes(:address).group(:zipcode).select('COUNT(*) AS count_zipcode_id')
我将其移至模型中并能够通过以下方法解决:
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 } %>