🐷
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