0

我有以下型号:

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 ...}

我尝试加入表格和自定义选择选项,但它们不起作用。

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

非常感谢您的帮助!

4

2 回答 2

1

与其使用 SQL 方法并使用“计数/分组依据”,不如查看 Rails ActiveRecords 的一个非常简单的特性:counter_cache列。

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

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

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

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

于 2013-07-31T22:49:33.790 回答
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 的观点,您应该尝试考虑更有意义的类名。

于 2013-07-31T23:36:24.697 回答