0

次のような関係を持つコメント、ケース、ケース ステップ、およびタスク テーブルがあります。

コメント モデル:

belongs_to :commentable, polymorphic: true, counter_cache: true

ケースモデル:

has_many :case_steps, class_name: 'CaseStep', foreign_key: 'case_id', dependent: :destroy
has_many :tasks, through: :case_steps

ケース ステップ モデル:

belongs_to :case, class_name: 'Case', foreign_key: 'case_id'
has_many :tasks, class_name: 'Task', foreign_key: 'case_step_id', dependent: :destroy

タスク モデル:

belongs_to :case_step, class_name: 'CaseStep', foreign_key: 'case_step_id'

case、case_steps、および tasks の 3 つのテーブルすべてに、comments_count というフィールドがあります。

ケース インデックス ページで、特定のケースに属するすべての commnts_count の数を表示する必要があります。ケース 'Case1' に 2 つのケース ステップ 'Case Step1' および 'Case Step2' があり、'Case Step1' に 3 つのタスク 'Task1'、'Task2' および 'Task3' があり、'Case Step2' に 2 つのタスク 'Task4' がある場合を意味します。 ' および 'Task5' の場合、'Case1'、'Case Step1'、'Case Step2'、'Task1'、'Task2' および 'Task3'、'Task4' および ' Task5'.

すべてのカウントを取得するための正確なクエリを作成する方法を取得しています...たくさん試しました。

4

1 に答える 1

0

次の sql クエリを使用して find_by_sql クエリを作成することをお勧めします。ケース ID の 1 を置き換えるだけです

Select id , case_name , count(comments_count) from cases where id =1 group by id, case_name
Union
Select case_type_id , case_type_name , count(comments_count) from case_types where case_id =1 group by case_id, case_type_name
Union
Select case_step_id , case_step_name , count(comments_count) from case_steps where case_step_id in (select id from case_steps where case_id =1) group by case_step_id , case_step_name 
于 2013-07-19T08:44:18.300 に答える