【问题标题】:Rails: How do I group by a column in a join tableRails:如何按连接表中的列分组
【发布时间】:2018-12-06 23:04:49
【问题描述】:

我的模型如下所示:

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)。

【问题讨论】:

    标签: ruby-on-rails join count


    【解决方案1】:

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

    User.group(:name)

    => SELECT "users".* FROM "users" GROUP BY name

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

    Task.count(:project_id)

    SELECT COUNT("tasks", "project_id") FROM "tasks"

    我们可以将这两种方法结合起来得到每个项目的任务数。

    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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      相关资源
      最近更新 更多