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 |
原注: 従来の構文は、今後非推奨化されるまで利用できます。
概要
原著者の許諾を得て翻訳・公開いたします。