Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rails 7のenumに新しい構文が導入(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Rails 7のenumに新しい構文が導入(翻訳)

Rails 7の最新の変更で、enum定義に新しい構文が導入されました(#41328)。

変更前

従来の構文では、以下のように「enumの名前」「enumの値」「enumのオプション」を渡せます。

class Post < ActiveRecord::Base
  enum status: [ :draft, :published, :archived ], _prefix: true, _scopes: false
  enum category: [ :free, :premium ], _suffix: true, _default: :free
end

変更後

新しい構文では「enumの名前」と「enumの値」が別の引数に分けられ、以下のようにenumのオプションをキーバリューペアとして渡せるようになりました。

class Post < ActiveRecord::Base
  enum :status, [ :draft, :published, :archived ], prefix: true, scopes: false
  enum :category, [ :free, :premium ], suffix: true, default: :free
end

この変更は、ハッシュ構文でも有効です。

class Post < ActiveRecord::Base
  enum :status, { draft: 0, published: 1, archived: 2 }, prefix: true, scopes: false
  enum :category, { free: 0, premium: 1 }, suffix: true, default: :free
end

上のコードによって以下のインスタンスメソッドがこれまでどおりRailsによって生成され、動作も同じです。

  • status_draft?
  • status_draft!
  • status_published?
  • status_published!
  • status_archived?
  • status_archived!
  • free_category?
  • free_category!
  • premium_category?
  • premium_category!

以下のスコープも作成されます。

  • free_category
  • premium_category

なお、ここではscopes: falseを指定したのでstatus用のスコープは生成されません。

オプションのキー名も以下のように_なしに変更されました。

従来のオプション 新しいオプション
_default default
_prefix prefix
_suffix suffix
_scopes scopes

原注: 従来の構文は、今後非推奨化されるまで利用できます。

関連記事

Rails 7: ERBでRubyのハッシュをHTML属性に変換する機能(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。