🐢

enumの一覧表示を上書きする

2024/12/28に公開

これは何?

Railsでenumを使うとき、クラスメソッドとして生えるデータ一覧表示のロジックを上書きする方法です

やりかた

Railsで以下のenumを定義するとrolesがクラスメソッドとして定義されます。DB移行期で一時的に付与したいラベルカラムがあって、かつ画面で表示させたくない場合は定義されたrolesaliasで上書きします。

class Organization < ApplicationRecord
  enum :role, {
    member: 0, # メンバー
    option: 1 # ラベル付けだけのためにあるロール(コードでは利用しない)
  }

  class << self
    alias _org_roles roles

    def roles
      _org_roles.except(:option)
    end
  end
end

備考

この方法を取らなくても、enumのバリデーションを外してテーブルアップデート時に適当な使わない数値にupdateしてやれば良い気がしましたが、enumのバリデーションを外してしまうとデータ不整合が起きる危険性があるため、一時的な措置としてこちらの方法を採用しました。

Discussion