嗨,我有这个公司模型,下面的枚举适用于Rails < 7.1
class Company < ApplicationRecord
enum auth_type: {
password: 'password',
magic_link: 'magic_link',
google: 'google',
microsoft: 'microsoft',
saml: 'saml',
workos: 'workos',
developer: 'developer'
}, _prefix: :auth_by
end
字符串
一旦我尝试升级到rails 7.1,它就停止工作了,因为它在CI上已经进行的迁移上中断了,并出现以下错误:
Unknown enum attribute 'auth_type' for Company
/home/runner/work/clearyapp/clearyapp/vendor/bundle/ruby/3.2.0/gems/activerecord-7.1.0/lib/active_record/enum.rb:174:in `block in load_schema!'
型
我看到这个错误是在7.1中添加的,请访问https://my.diffend.io/gems/activerecord/7.0.8/7.1.0/page/26#d2h-285143-749
我不明白的是,如果错误没有告诉我任何有用的信息,我应该如何修复它。
有人知道怎么修吗?
2条答案
按热度按时间chhqkbe11#
最后,这就是莱斯-南丁格尔对这个问题的评论。
在添加
auth_type
列的迁移之前,我在早期的迁移文件中有一个Company.where().find_each
逻辑。因此,模型试图在列存在之前初始化枚举类型。在我的例子中,修复方法是在迁移中删除
Company
的使用,因为我不再需要它了。如果你遇到同样的问题,你可能需要找到一种方法来做你需要做的事情,而不直接使用模型,这将强制执行枚举逻辑。atmip9wb2#
对于枚举没有DB列支持的用户
rails
7.1
似乎增加了对枚举的验证,并且不再支持不支持DB列的枚举。查看this issue以了解更多细节。@jonathanhefner制作了this PR,增加了对非DB支持属性的枚举的支持。
在3165b6f中向后移植到
7-1-stable
。https://github.com/rails/rails/pull/49769#issuecomment-1777833124
在这个问题上,我看到了两种可能的方法。
使用
7-1-stable
分支使用
7-1-stable
分支并为enum添加一个属性应该可以删除该错误。个字符
为该枚举添加DB列
型