【问题标题】:Active record fetching query活动记录获取查询
【发布时间】:2013-07-19 08:03:56
【问题描述】:

我有 cmets、cases、case step 和 tasks 表,关系为:

评论模型:

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都有字段:cmets_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' 和 '的所有 cmets_count 的计数任务 5'。

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

【问题讨论】:

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


    【解决方案1】:

    我会建议您使用以下 sql 查询编写 find_by_sql 查询。只需将 1 替换为您的案例 id

    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 
    

    【讨论】:

      猜你喜欢
      • 2012-08-01
      • 1970-01-01
      • 2016-03-10
      • 2013-02-01
      • 2013-04-23
      • 2016-11-10
      • 1970-01-01
      • 2011-11-17
      相关资源
      最近更新 更多