我有以下型号:
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 ...}
我尝试加入表格和自定义选择选项,但它们无效。
这可以在查询中完成,我不必再次遍历主类吗?
非常感谢你的帮助!
答案 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你应该尝试考虑更有意义的类名。