【问题标题】:Rails join from association in two tablesRails 从两个表中的关联连接
【发布时间】:2013-12-16 22:11:48
【问题描述】:

我必须表格:同事和部门

一个员工属于一个部门(belongs_to),一个部门有多个员工(has_many)

我试图做的是计算每个部门的员工人数并用数据制作一个饼图,我让图表使用基本的东西(Department.count)

我刚开始使用 Rails,但遇到查询问题

Associate.joins(:department).group(:name).count

我得到的是以下内容

Mysql2::Error: 字段列表中的列 'name' 不明确:SELECT COUNT(*) AS count_all, name AS name FROM associates INNER JOIN departments ON departments.id = associates .department_id 按名称分组

我尝试进行选择、查找,但似乎无法正确完成

【问题讨论】:

  • 使用group子句中的表名:group('associates.name')
  • 工作就像一个魅力!我应该想到这一点,但是由于我已经在加入部门,所以我认为没有必要!非常感谢

标签: mysql ruby-on-rails ruby join associations


【解决方案1】:

如果您的关联设置正确,我相信您应该能够执行以下操作:

Department.find(<some_id>).associates.count

或者,如果您拥有所有部门,并且您正在循环访问它们,假设在一个视图中并且您想要获取所有计数,您可以执行以下操作:

@departments = Deparment.all

@departments.each do |department|
  department.associates.count
end

您的关联表需要一个 department_id 列。

【讨论】:

  • 这不是优化代码,你应该让DB处理计数过程。
  • 我这样做了,它确实有效,它提取了数据库中两个不同的两个部门的计数,但我希望能够像这样在我的图表中显示它 = pie_chart Department.joins(: associates).group(:department => :name).count
【解决方案2】:

如帖子评论中所述,您必须通过指定表格来解决不明确的 name 属性。您可以按照建议使用字符串,也可以将块传递给group_by

Associate.joins(:department).group_by(&amp;:name).count

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 2019-06-23
    • 2023-03-22
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多