Techioz Blog

Ruby 3.2.2 で壊れた enum のリストを取得する

概要

Rails アプリを Ruby 2.7.0 から 3.2.2 に更新し、次のコードを追加しました。

class TemplateField < ApplicationRecord
  enum group: {
    'primary':    'primary',
    'secondary':  'secondary',
    'auxiliary':  'auxiliary',
    'header':     'header',
    'back':       'back',
    'unassigned': 'unassigned'
  }
end

class Template < ApplicationRecord
  TemplateField.groups.each do |_key, val|
    has_many "fields_#{val.pluralize}".to_sym #...
  end
end

次のメッセージが表示されて中断されました。

NoMethodError:
  undefined method `groups' for TemplateField:Class

基本的に、コンソールで TemplateField.groups を直接呼び出しても、同じエラーが発生します。 Ruby 2.7 と 3.2 の間で注意すべき変更点はありますか?

解決策

私の場合、それは古い sorbet-rails 依存関係が原因でした。バンドル更新シャーベット シャーベットレールを実行すると問題が解決しました。