rails:使用连接表计数和分组

时间:2013-07-31 22:21:23

标签: ruby-on-rails activerecord arel

我有以下型号:

Car: 
has_many :car_classes  

CarClass:
belongs_to :Car
belongs_to :CarMainClass

CarMainClass:
has_many :car_classes

我想要做的是计算CarClass中按car_main_class_id分组的汽车数量,然后将其链接到CarMainClass中的main_class_symbol。

我现在的查询是:

CarClass.group(:car_main_class_id).count(:car_id) => {43=>79, 45=>4 ...}

这几乎是我想要的,除了我最终只得到:car_main_class_id我将成为:来自CarMainClass的main_class_symbol:

{"A1"=>79, "A2"=>4 ...}

我尝试加入表格和自定义选择选项,但它们无效。

这可以在查询中完成,我不必再次遍历主类吗?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您应该查看Rails ActiveRecords的一个非常简单的功能: counter_cache 列,而不是使用SQL方法并使用“count / group by”。

例如,您可以在CarMainClass中添加列“car_classes_count”,在CarClass类中,您可以这样做:

CarClass:
belongs_to :car
belongs_to :car_main_class, :counter_cache => true

您可以使用Car中的“car_class_count”列执行相同的操作。

我不知道它是否可以提供帮助,但是当我开始使用Rails开发时,我遇到了同样的问题。我试图做一些不成功的疯狂SQL查询(查询有用sqlite,但没有w / postgres),我最后选择了另一种方法。

答案 1 :(得分:0)

试试这个:

CarClass.includes(:car_main_class => :car_classes)
 .group(:car_main_class_id).map { |cc| 
   { cc.car_main_class.main_class_symbol => cc.car_main_class.cars.size }
 }

虽然这很难看 - 我同意@Tom你应该尝试考虑更有意义的类名。