Как сделать объединение в Ruby on Rails - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть проект, над которым я работаю, и я должен был внести изменения.Мы разрабатываем приложение, такое как 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

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вы захотите начать запрос с пользовательской модели, присоединяясь к задачам.Затем вам нужно выбрать полное имя и количество задач.Примерно так должно работать:

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

Надеюсь, это поможет - дайте мне знать, как вы поживаете или если у вас есть какие-либо вопросы:)

0 голосов
/ 24 сентября 2019

Попробуйте это:

User.joins(:tasks).group(:full_name).count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...