Rails 5.2-尝试定义枚举时出现ArgumentError

时间:2019-12-11 11:51:03

标签: ruby-on-rails ruby activerecord enums ruby-on-rails-5

我的班级定义了一个值为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 保留相同的值。无论哪种方式,我都不知道为什么会发生错误。

1 个答案:

答案 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实际上是压缩数组的代码进行交互。

相关问题