RailsAdminEnumConfigurable を作った経緯
RailsAdmin
いいですよね。開発初期あるいはリリース後も管理画面まで手が回らないときは重宝します。
しかし enum
を使うときだけはどうも面倒で,
class User < ApplicationRecord
enum status: { active: 1, supended: 2, deleted: 3 }
def status_enum
{ active: 1, supended: 2, deleted: 3 }
# self.class.statuses とするとより dry
end
end
というように, xxx_enum
というメソッドを定義してあげないと正しく動きません (ドキュメントにもそう書いてあるし,なんでそうなっているかは該当コードを読むのが一番早い)。
enum
を使う度にこれを毎回やるのは不毛なので,このメソッド定義をよろしくやってくれる gem を作りました。その名も RailsAdminEnumConfigurable
。 concern として作っているので,
class User < ApplicationRecord
include RailsAdminEnumConfigurable
enum status: { active: 1, supended: 2, deleted: 3 }
end
とするだけです。
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
include RailsAdminEnumConfigurable
end
というように親に読み込ませてしまえば各モデルの変更すら不要です。
同じ苦悩をお持ちの方はぜひ使われてみてください。
https://rubygems.org/gems/rails_admin_enum_configurable
蛇足
enum を使っているカラム一覧を取得できるメソッドも付いてきます (使うケース全くなさそうですが...)。
User.enum_attributes # => [:status]