🐈

Rails7 enumでundefined method `all?' for true:TrueClass (NoMethodError)

2024/03/08に公開

起こったこと

モデルにenumを定義して、うまく書けてるか確認しようとrails consoleでモデル名だけ入力して接続確認しようとしたら

/usr/local/bundle/gems/activerecord-7.0.7.2/lib/active_record/enum.rb:270:in `assert_valid_enum_definition_values': undefined method `all?' for true:TrueClass (NoMethodError)

        unless values.is_a?(Hash) || values.all?(Symbol) || values.all?(String)
                                           ^^^^^

が出た

間違っていたenum

enum status: {
  ok: 1,
  ng: 2
}, prefix: true

動作したenum

enum :status, {
  ok: 1,
  ng: 2
}, prefix: true

もしくは

(古い書き方)

enum status: {
  ok: 1,
  ng: 2
}, _prefix: true

原因

Rails7からのprefixの設定方法と以前の記法が混ざっていた

参考

https://techracho.bpsinc.jp/hachi8833/2021_06_17/105107

Discussion