我的班级定义了一个带有值enum source: [:pdf, :zip]
的enum。每次我启动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]
的名称可以解决此问题,但是由于过去一直有效,因此我宁愿保留其代码。
UPDATE我已经设法通过使用prefix: :source
解决了这个问题。这样,我可以为enum保留相同的值。无论哪种方式,我都不知道为什么会发生错误。
有问题的方法实际上是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
实际压缩数组的代码进行交互。