Ruby on rails Rails 5.2-尝试定义枚举时出错
我的类使用值Ruby on rails Rails 5.2-尝试定义枚举时出错,ruby-on-rails,ruby,activerecord,enums,ruby-on-rails-5,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.
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创建枚举
发行说明中没有其他说明。我已经查看了Rails的源代码,但找不到任何可能导致此问题的内容
注意:将值的名称更改为类似[:pdf\u type,:zip\u type]
的其他名称可以解决此问题,但我宁愿保留代码,因为这在过去是有效的
更新
我通过使用前缀::source
解决了这个问题。这样我就可以为枚举保留相同的值。无论如何,我都不知道为什么会发生错误。所讨论的方法实际上是Ruby标准库的哪一部分:
irb(main):049:0> ['a','b', 'c'].zip([1,2,3])
=> [["a", 1], ["b", 2], ["c", 3]]
它将数组合并在一起ActiveRecord::Relation
包含可枚举项,这使得它的行为类似于数组
在更新到5.2.4之前,这方面没有问题。有吗
ActiveRecord库上阻止创建带有
价值:拉链
在更新之前,你有一个古老的Ruby版本吗?如前所述,此方法是Ruby的一部分,而不是AR。实际上,这是一个完全无关的问题-定义与enumerable冲突的类方法不是一个好主意,因为您迟早会与依赖于实际压缩数组的代码进行交互。Ruby版本从2.4.5更新为2.5.5。哦,所以#zip
属于可枚举的
。我注意到ActiveRecord::Relation
中包含了Enumerable
,但我没有加入这些点。感谢@max的澄清