То, что вы там создали, называется «константами», а не перечислениями. Как сказал Забба, «Ruby не имеет« enum ».» Если вы должны сохранить эту структуру данных, если вы уже используете константы в своем коде, то вы можете итерировать их следующим образом:
UserStatus.constants(false).each do |const_name|
p [ const_name, UserStatus.const_get( const_name ) ]
end
#=> :NEW, "new"]
#=> [:OLD, "old"]
#=> [:DELETED, "deleted"]
Использование false
выше необходимо, чтобы помешать вам получить константы, определенные в суперклассах:
class Foo; A = 1; end
class Bar < Foo; B = 1; end
Bar.constants
#=> [:B, :A]
Bar.constants(false)
#=> [:B]
Если вы не состоите в браке с использованием отдельных констант, возможно, вас заинтересует создание замороженного хеша неизменяемых значений:
class User < ActiveRecord::Base
STATUS = {
:new => 'new',
:old => 'old',
:deleted => 'deleted'
}
STATUS.freeze
STATUS.values.each{ |v| v.freeze }
end
bob.status = User::STATUS[:new]
User::STATUS.each do |name,string|
p [ name, string ]
end