Railsのenumで定義したシンボルは真偽値を返したり破壊的変更ができる

こんにちは!kossyです!




かなり久々のブログの執筆です、、、
流石にアウトプットしなさすぎてまずいので、簡単なことでいいのでアウトプットをしてみます。




さて、今回は、Rails4系から使えるようになったenumのTips的なことを
ブログに残してみたいと思います。




環境
Rails 5.2.3
Ruby 2.6.3





真偽値を返す使い方

例えば、下記のようにモデルに定義したとします。

app/models/user.rb

enum role: [:admin, :normal]


このように定義すると、

@user = User.create role: :admin

@user.admin?
=> true

のように、シンボルで定義したものに?をつけると、roleの値がそのシンボルかどうかの真偽値を返すことができます。

モデル内のメソッドで使いたいときは、

def permit_admin
  if admin?
     処理
  end
end

みたいに使えます。



破壊的変更もできちゃう

次は破壊的変更です。

@user  = User.first

@user.role
=> "normal"

@user.admin!
=> true

@user.role
=> "admin"

ってな感じで使えます。




enumは配列型で定義するやり方だけでなく、ハッシュ型で定義するやり方もあるので、
コード規約に従って記述しましょう。。。