我的班级定义了一个值为enum source: [:pdf, :zip]
的枚举。每次启动Rails应用程序时,都会出现以下错误:
ArgumentError: You tried to define an enum named "source" on the model "ExtractionRule",
but this will generate a class method "zip", which is already defined by ActiveRecord::Relation.
在更新至5.2.4之前,此操作没有问题。 ActiveRecord库上是否有任何阻止创建值为:zip
的 enum 的更新?
发行说明中没有其他说明。我已经研究过Rails的源代码,但是找不到任何会造成此问题的东西。
注意:将值的名称更改为[:pdf_type, :zip_type]
之类的东西可以解决此问题,但由于过去一直在工作,因此我宁愿保留其代码。< / p>
更新
我已经通过使用prefix: :source
解决了这个问题。这样,我可以为 enum 保留相同的值。无论哪种方式,我都不知道为什么会发生错误。
答案 0 :(得分:2)
有问题的方法实际上是Enumerable#zip,它是Ruby标准库的一部分:
irb(main):049:0> ['a','b', 'c'].zip([1,2,3])
=> [["a", 1], ["b", 2], ["c", 3]]
将数组合并在一起。 ActiveRecord::Relation
包含Enumerable,这使它像数组一样起作用。
在更新至5.2.4之前,此操作没有问题。在那儿 ActiveRecord库上的任何更新,阻止使用以下命令创建枚举 值:zip?
在更新之前,您是否有一个古老的Ruby版本?如前所述,该方法是Ruby的一部分,而不是AR。这实际上是一个完全不相关的问题-定义与可枚举碰撞的类方法不是一个好主意,因为您迟早会与依赖于#zip
实际上是压缩数组的代码进行交互。