こんにちは!kossyです!
さて、今回はRailsにおいて、enumで定義した値がenum内の値かどうかを検証する方法について、
ブログに残してみたいと思います。
サンプル
例えば下記の実装があったとします。
class Article enum status: [:draft, :published, :dropped] end
このような実装をしていた時に、
「ブラウザから送られてきたパラメータがenumで定義した値のいずれかでなければ、エラーを返す」
という実装を行いたいとします。
普通に実装すると
raise StandardError unless [:draft, :published, :dropped].include?(params[:status])
みたいになるかと思うのですが、
Enumで定義した値は、
Article.statuses(モデル名.enumで定義したカラムの複数形)とすると、
{ "draft": 0, "published": 1, "dropped": 2 }
という返り値を得ることができるので、keysメソッドと合わせて、
raise StandardError unless Article.statuses.keys.include?(params[:status])
と書くことができます。
Railsっぽくていいですね!