ruby 如何在Rails 7.1升级后修复“Unknown enum attribute”?

2nc8po8w  于 2023-11-18  发布在  Ruby
关注(0)|答案(2)|浏览(129)

嗨,我有这个公司模型,下面的枚举适用于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
我不明白的是,如果错误没有告诉我任何有用的信息,我应该如何修复它。
有人知道怎么修吗?

chhqkbe1

chhqkbe11#

最后,这就是莱斯-南丁格尔对这个问题的评论。
在添加auth_type列的迁移之前,我在早期的迁移文件中有一个Company.where().find_each逻辑。因此,模型试图在列存在之前初始化枚举类型。
在我的例子中,修复方法是在迁移中删除Company的使用,因为我不再需要它了。如果你遇到同样的问题,你可能需要找到一种方法来做你需要做的事情,而不直接使用模型,这将强制执行枚举逻辑。

atmip9wb

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添加一个属性应该可以删除该错误。

gem 'rails', git: 'https://github.com/rails/rails.git', branch: '7-1-stable'

个字符

为该枚举添加DB列

class AddMissingEnumsColumns < ActiveRecord::Migration[7.1]
  def change
    add_column :companies, :auth_type, :string
  end
end

相关问题