Rails:如何按联接表中的列分组

时间:2018-12-06 23:04:50

标签: ruby-on-rails join count

我的模型如下:

class Task < ApplicationRecord
  belongs_to :project
  belongs_to :urgency
end

class Project < ApplicationRecord
  has_many :tasks, dependent: :destroy
end

class Urgency < ApplicationRecord
  has_many :tasks
end

我正在尝试在表格中显示每个项目的任务数。例如,我要查看表格,显示项目A有10个任务,项目B有7个任务,等等。

此外,我只想显示每个项目中紧急度较高的任务数(这意味着从任务表中获取urgency_id并在“紧急度”表中查找urgency_name)。

1 个答案:

答案 0 :(得分:0)

您应该看一下ActiveRecord提供的group方法。这是它生成的SQL的示例:

  

User.group(:name)

     

=>选择“用户”。*从“用户” GROUP BY名称中

此外,您还应该看看ActiveRecord提供的count方法。这是它生成的SQL的示例:

  

Task.count(:project_id)

     

从“任务”中选择COUNT(“ tasks”,“ project_id”)

我们可以将这两种方法结合在一起,以获得每个项目的任务数。

Task.group(:project_id).count(:project_id) 
# This returns {1=>2, 2=>3} in my database. This suggests, project1 has 2 tasks, project2 has 3 tasks

要满足您的第二个要求,我们将需要使用rails joins方法。

Task.joins(:urgency).where("urgencies.utype = 'High'").group(:project_id).count(:project_id)
# This returns {2=>1}, suggesting project 2 has 1 task where the urgency (utype) is high.