class Object
Public Instance Methods
PGEnum(**definitions)
click to toggle source
Declare an enum attribute where the values map to strings enforced by PostgreSQL's enumerated types.
class Conversation < ActiveRecord::Base include PGEnum(status: %i[active archived]) end
This is merely a wrapper over traditional enum syntax so that you can define string-based enums with an array of values.
# File lib/active_record/pg_enum.rb, line 73 def PGEnum(**definitions) values = definitions.values.map do |value| if value.is_a? Array keys = value.map(&:to_sym) values = value.map(&:to_s) Hash[keys.zip(values)] else value end end Module.new do define_singleton_method(:inspect) { %{ActiveRecord::PGEnum(#{definitions.keys.join(" ")})} } define_singleton_method :included do |klass| klass.enum Hash[definitions.keys.zip(values)] end end end