【问题标题】:How to do a join in Ruby on Rails如何在 Ruby on Rails 中加入
【发布时间】:2020-01-24 06:52:39
【问题描述】:

我有一个正在处理的项目,我要做出一些改变。 我们正在开发一个像 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

【问题讨论】:

  • 您想显示current_user 分配的任务数,对吗?您是否发现任何需要澄清的here 或here?那是什么?
  • 是的,我想要那个.. 旧方法有效,它显示分配给用户的任务,但一位前辈让我改变它,现在我很挣扎。
  • 如果您遇到困难,请不要害怕向资深人士寻求指导 - 如果他们擅长工作,他们应该很乐意提供一些建议 :) 否则,我认为无论如何,这里的答案都应该破解。

标签: ruby-on-rails join


【解决方案1】:

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

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

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

【讨论】:

  • 无法将“用户”加入名为“任务”的关联;也许你拼错了?这是它显示给我的错误:/
  • User 和 Task 之间的关联是什么 - 你能用显示这个的型号代码更新你的问题吗@arniii69?如果它是标准的belongs_to 关系,这可能会起作用,如果不是,可能需要一点修补:)
  • 当然 :) 问题是您的用户没有与任务关联(而您有反向关联设置)。如果您更新用​​户模型以添加 has_many :tasks, inverse_of: :assigned (
  • 它们与帐户表/用户:has_many :accounts / 帐户:has_many :tasks 连接
  • 啊 - 在这种情况下,您需要添加 has_many :tasks, through: :accounts。相信应该破解它@arniii69 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多