活动记录提取查询

时间:2013-07-19 08:03:57

标签: ruby-on-rails-3.2 model-associations

我的评论,案例,案例步骤和任务表的关系为:

评论模型:

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都有字段:comments_count

在我的案例索引页面上,我必须显示属于特定案例的所有commnts_count的计数。表示案例'Case1'有两个案例步骤'Case Step1'和'Case Step2'和'Case Step1'有三个任务'Task1','Task2'和'Task3','Case Step2'有两个任务'Task4 '和'Task5',然后它应显示所有表'Case1','Case Step1','Case Step2','Task1','Task2'和'Task3','Task4'和'的所有comments_count的计数任务5' 。

现在获取如何编写确切的查询以获取所有计数...尝试了很多。

1 个答案:

答案 0 :(得分: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