🐢
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