首页 > 解决方案 > 如何在 Ruby on Rails 中加入

问题描述

我有一个我正在做的项目,我已经做出了一些改变。我们正在开发一个像 Jira 这样的应用程序,您可以在其中有不同的任务板。我必须创建一个饼图来显示用户有多少任务。我的旧版本代码是这样的:

= pie_chart Task.all.group(:assigned_id).count.map { |k,v| [User.find(k).full_name, v] }.to_h

它奏效了。一位资深人士告诉我创建一个查询来获取名称和任务计数对。直到现在我有这样的东西,但它不工作:

= pie_chart current_account.organization.Tasks = Task.joins(:assigned_id).where(:full_name)

楷模:

class Account < ApplicationRecord
  belongs_to :user
  belongs_to :role
  belongs_to :organization
  has_many :activities, dependent: :destroy  
  has_many :tasks, dependent: :destroy
  has_many :activities, dependent: :destroy
  has_many :comments, dependent: :destroy

class Organization < ApplicationRecord
  include PgSearch
  has_one_attached :logo
  has_many :accounts
  has_many :boards

class Task < ApplicationRecord

  has_one_attached :file
  belongs_to :list
  belongs_to :owner, class_name: "Account", foreign_key: "owner_id"
  belongs_to :assigned, class_name: "Account", foreign_key: "assigned_id"
  has_many :subtasks, dependent: :destroy
  has_many :comments, dependent: :destroy
  has_many :activities, dependent: :destroy

class User < ApplicationRecord
  include PgSearch

  has_many :accounts, dependent: :destroy
  has_one_attached :avatar

标签: ruby-on-railsjoin

解决方案


您需要使用用户模型开始查询,加入任务。然后您需要选择全名和任务数。像这样的东西应该工作:

data = User.joins(:tasks).select(:fullname, 'count(tasks.id) AS count')

然后,您可以映射这些以获得所需的数组数组:

data.map { |x| [x.email, x.count] }.to_h
# => { "A name" => 163, ...}

或者在一个衬里:

= pie_chart User.joins(:tasks).select(:fullname, 'count(tasks.id) AS count').map { |x| [x.email, x.count] }.to_h

希望这会有所帮助 - 如果您有任何问题,请告诉我您的进展情况:)


推荐阅读