2022年6月30日あたりの話です。
こちら に記載されている通りなのですが、sorbet-railsはRailsのenumを直接書き換える実装になっており、Rails 7に対応していないので盛大に壊れます。
自分は、元のenumを別名で再度生やしてとりあえずそれを使うことで回避するようにしました。
↓のようにオープンクラスでActiveRecord::Enumを開いて、enum実装のコピーをoriginal_enumメソッドとして用意することで暫定対応しています。
lib/ext/active_record/enum.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| module ActiveRecord::Enum
# https://github.com/chanzuckerberg/sorbet-rails/issues/479
def original_enum(name = nil, values = nil, **options)
if name
unless values
values = options
options = {}
end
return _enum(name, values, **options)
end
definitions = options.slice!(:_prefix, :_suffix, :_scopes, :_default)
options.transform_keys! { |key| :"#{key[1..-1]}" }
definitions.each { |name, values| _enum(name, values, **options) }
end
end
|
config/initializers/extensions.rb
1
2
| # typed: strict
require 'ext/active_record/enum'
|
sorbet-railsとても助かっていて感謝しているのですが、enumの実装に関しては上書きする形にしないでほしかったなーというお気持ちです。