0

私は次のモデルを持っています:

Car: 
has_many :car_classes  

CarClass:
belongs_to :Car
belongs_to :CarMainClass

CarMainClass:
has_many :car_classes

私がやりたいことは、car_main_class_id でグループ化された CarClass 内の車の数をカウントすることですが、CarMainClass にある main_class_symbol にリンクされています。

私が今持っているクエリは次のとおりです。

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

CarMainClass の :main_class_symbol になる :car_main_class_id だけになることを除いて、これはほとんど私が望むものです。

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

テーブルとカスタム選択オプションを結合しようとしましたが、うまくいきませんでした。

これは、メイン クラスを再度反復処理する必要のないクエリで実行できますか?

助けてくれて本当にありがとうございます!

4

2 に答える 2

1

SQL アプローチを使用して「count/group by」を使用する代わりに、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 に答える