🐷

RailsのEnumを久しぶりに触ったらハマった件。(しょうもないミス)

に公開

結論

Railsでenumの書き方が変わってたそう。
自分の書き方が新旧ごっちゃになってたことによるエラーが起きてたww

実情

  # enum role: { general: 0, admin: 1}, validate: true, prefix: true
  enum :role, { general: 0, admin: 1}, validate: true, prefix: true

下の書き方でうまくいきました。
自分が久しぶりに書いたこともあり、いろいろ調べながらやっていく中で新旧ごっちゃの書き方になりエラーとなっていたっぽいです。

こんなエラーがずっと出てた

app/models/user.rb:7:in `<class:User>': You tried to define an enum named "role" on the model "User", but this will generate a instance method "general?", which is already defined by another enum. (ArgumentError)
	from app/models/user.rb:2:in `<top (required)>'
	from (irb):1:in `<main>'

ただしいかきかた

Rails 7から新しく変わったそうですね。

class Book < ActiveRecord::Base
  enum :status, [ :proposed, :written ], prefix: true, scopes: false
  enum :cover, [ :hard, :soft ], suffix: true, default: :hard
end

最初がhashではなく、シンボルの引数で書く感じ。

終わりに

勉強してかないとダメですねー。
enumの書き方もstringにするのかintegerにするのかでもメリデメ違うそうなので。
脳死AIだけは気をつけていかないとですね。

Discussion