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

问题描述 投票:0回答:1

我的班级定义了一个带有值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库上是否有任何更新阻止创建带有值:zipenum

发行说明中没有其他说明。我已经研究过Rails的源代码,但是找不到任何会造成此问题的东西。

:将值的名称更改为类似[:pdf_type, :zip_type]的名称可以解决此问题,但是由于过去一直有效,因此我宁愿保留其代码。

UPDATE我已经设法通过使用prefix: :source解决了这个问题。这样,我可以为enum保留相同的值。无论哪种方式,我都不知道为什么会发生错误。

ruby-on-rails ruby activerecord enums ruby-on-rails-5
1个回答
1
投票

有问题的方法实际上是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实际压缩数组的代码进行交互。

© www.soinside.com 2019 - 2024. All rights reserved.