🐢
enumの一覧表示を上書きする
これは何?
Railsでenum
を使うとき、クラスメソッドとして生えるデータ一覧表示のロジックを上書きする方法です
やりかた
Railsで以下のenum
を定義するとroles
がクラスメソッドとして定義されます。DB移行期で一時的に付与したいラベルカラムがあって、かつ画面で表示させたくない場合は定義されたroles
をalias
で上書きします。
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