こんにちは!kossyです!
さて、今回はRailsでenumを定義すると、自動でscopeが定義されるので、
その使い方についてブログに残してみたいと思います。
環境
Ruby 2.6.3
Rails 6.0.3
MacOS Mojave
使い方
例えば、Articleモデルがあって、
class Article enum status: [:published, :draft, :ignore] end
のようにenumでstatusを定義しているとします。
このとき、「Articleのなかでstatusがdraftになっているレコードを抽出したい」とした場合、
Article.where(status: :draft) => #<ActiveRecord::Relation [#<Article id: 1, status: "draft"]
のように取得できますが、enumで定義している場合、
Article.draft => #<ActiveRecord::Relation [#<Article id: 1, status: "draft"]
とする事で、whereを使った時と同様の結果を得られるようになります。
where.notで取りたい場合も、
Article.not_draft
とするだけで取得することができます。
これは、enumを定義すると自動的にクラスに対してscopeが定義されるためです。
ActiveRecord::Enum
勉強になりました。