按关联分组时列上的引用不明确

Oliverguenther

我将与报告相关的已知用户(即负责该报告的用户和当前分配给该用户的用户)的错误报告列表分组。

模型Bug(AR,Rails的4.2.x版),因此具有除其他外,两个协会assigned_toresponsible,被解析为外键assigned_to_idresponsible_id

错误也可能与项目相关,该项目可能还具有负责任的用户设置,因此它们也具有responsible_id外键。

在对报表本身和关联项目的两个属性进行分组时,我们希望将关联项目包括在返回的查询中。

然后,我可以<User> => count通过以下语句,根据错误报告的关联名称对哈希值进行计数

Bug.group(:assigned_to)
   .includes(:project)
   .references(:projects)
   .count

可以正确产生所需的结果:用户(被分配者)及其被分配到的Bug的集合。

对于负责人,相同的查询:

Bug.group(:responsible)
   .includes(:project)
   .references(:projects)
   .count

产生一个错误,因为该属性responsible_id都包含在和中,bugs并且都包含在关联中projects

SELECT COUNT(DISTINCT "bugs"."id") AS count_id,
       responsible_id AS responsible_id
FROM "bugs"
LEFT OUTER JOIN "projects" ON "projects"."id" = "bugs"."project_id"
GROUP BY "bugs"."responsible_id"

如果我改为使用来对显式属性本身进行分组,则会Bugs.group('bugs.responsible_id')得到有效的响应,但是格式为responsible_id => count

SELECT COUNT(DISTINCT "bugs"."id") AS count_id,
       bugs.responsible_id AS bugs_responsible_id
FROM "bugs"
LEFT OUTER JOIN "projects" ON "projects"."id" = "bugs"."project_id"
WHERE <condition>
GROUP BY bugs.responsible_id

有没有一种方法可以强制使用关联,但是可以像在第二个查询中那样对查询进行命名空间?

当然,我可以处理结果并将其扩展到负责的用户,但是,由于分组是更大查询功能的一部分,因此,我无需对查询生成器进行大量更改就只能操纵分组标识符。

硫磺

我不认为现在有解决方案(在Rails 4.2.4中)。然而,在导轨5中将变得容易

如果您绝对必须立即解决问题,则可以ActiveRecord::Calculations#execute_grouped_calculation使用Rails 5中适用于您的应用程序的修补程序进行修补。只需在添加一个初始化config/initializersactive_record_calculations_patch.rb满足以下(略)的内容。您可以从rails版本复制原始代码,然后添加修复程序:

module ActiveRecord
  module Calculations
    def execute_grouped_calculation(operation, column_name, distinct)

      ...
      else
        group_fields = group_attrs
      end

      # LINE OF CODE COPIED OVER FROM THE FIX
      group_fields = arel_columns(group_fields)
      # END OF COPIED OVER CODE

      group_aliases = group_fields.map { |field|
        column_alias_for(field)
      ...

    end
  end
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

转换为矩阵时,对“内部”的引用不明确?

来自分类Dev

Pyspark:在同一列上连接数据框时引用不明确

来自分类Dev

对“ X”的引用不明确

来自分类Dev

对“列表”的引用不明确

来自分类Dev

SparkSQL CSV的引用不明确

来自分类Dev

使用ceil或round时对成员的引用不明确

来自分类Dev

使用UIApplicationShortcutItem时对成员“下标”的引用不明确

来自分类Dev

从常量获取值时出错:对成员“下标”的引用不明确

来自分类Dev

使用Google地图路线时对成员“下标”的引用不明确

来自分类Dev

Swift 3.0 错误:设置字典值时对成员“下标”的引用不明确

来自分类Dev

构造函数基本(对距离的引用不明确)

来自分类Dev

函数类型对成员nextInt()的引用不明确

来自分类Dev

漏洞?Groovy中的“方法引用不明确”

来自分类Dev

PlayFramework中的“对Validator的引用不明确”

来自分类Dev

GNU Radio 出错:“对‘uhd’的引用不明确”

来自分类Dev

为什么在使用命名空间std时出现错误“对struct_tag的引用不明确”?

来自分类Dev

解析json时对成员'subscript'的不明确引用

来自分类Dev

列引用不明确-它可以引用PL / pgSQL变量还是表列?

来自分类Dev

下标使用不明确

来自分类Dev

重载函数的调用不明确

来自分类Dev

播放2:模板中的“对表单的引用不明确”错误消息

来自分类Dev

Java类型推断:在Java 8中引用不明确,但在Java 7中不是

来自分类Dev

两个名称空间之间的引用不明确

来自分类Dev

Xamarin.Forms.Label和System.Reflection.Emit.Label之间的引用不明确

来自分类Dev

tableView.reloadData()错误:对成员的引用不明确

来自分类Dev

无法推断出通用参数“ S” +成员“ count”的引用不明确

来自分类Dev

为什么postgres触发函数返回一些列引用不明确?

来自分类Dev

代码::阻止linux glext.h“对uint64_t的引用不明确”

来自分类Dev

两个名称空间之间的引用不明确

Related 相关文章

  1. 1

    转换为矩阵时,对“内部”的引用不明确?

  2. 2

    Pyspark:在同一列上连接数据框时引用不明确

  3. 3

    对“ X”的引用不明确

  4. 4

    对“列表”的引用不明确

  5. 5

    SparkSQL CSV的引用不明确

  6. 6

    使用ceil或round时对成员的引用不明确

  7. 7

    使用UIApplicationShortcutItem时对成员“下标”的引用不明确

  8. 8

    从常量获取值时出错:对成员“下标”的引用不明确

  9. 9

    使用Google地图路线时对成员“下标”的引用不明确

  10. 10

    Swift 3.0 错误:设置字典值时对成员“下标”的引用不明确

  11. 11

    构造函数基本(对距离的引用不明确)

  12. 12

    函数类型对成员nextInt()的引用不明确

  13. 13

    漏洞?Groovy中的“方法引用不明确”

  14. 14

    PlayFramework中的“对Validator的引用不明确”

  15. 15

    GNU Radio 出错:“对‘uhd’的引用不明确”

  16. 16

    为什么在使用命名空间std时出现错误“对struct_tag的引用不明确”?

  17. 17

    解析json时对成员'subscript'的不明确引用

  18. 18

    列引用不明确-它可以引用PL / pgSQL变量还是表列?

  19. 19

    下标使用不明确

  20. 20

    重载函数的调用不明确

  21. 21

    播放2:模板中的“对表单的引用不明确”错误消息

  22. 22

    Java类型推断:在Java 8中引用不明确,但在Java 7中不是

  23. 23

    两个名称空间之间的引用不明确

  24. 24

    Xamarin.Forms.Label和System.Reflection.Emit.Label之间的引用不明确

  25. 25

    tableView.reloadData()错误:对成员的引用不明确

  26. 26

    无法推断出通用参数“ S” +成员“ count”的引用不明确

  27. 27

    为什么postgres触发函数返回一些列引用不明确?

  28. 28

    代码::阻止linux glext.h“对uint64_t的引用不明确”

  29. 29

    两个名称空间之间的引用不明确

热门标签

归档