Как проверить, является ли атрибут ActiveRecord Enum?

Как бы проверить, является ли атрибут ActiveRecord Enum? (согласно декларации перечисления Rails 4.1)

Он хранится в базе данных и использует метод type на columns_hash, который идентифицирует атрибут как целое число.

Определение enum в модели

enum status: [ :in_progress, :accepted, :approved, :declined, :closed, :cancelled, :submitted ]

Чтобы вытащить тип

irb(main):030:0> Application.columns_hash['status'].type
=> :integer

Ответ 1

ActiveRecord::Enum добавляет атрибут класса defined_enums - хэш, хранящий определенные перечисления:

Application.defined_enums
#=> {"status"=>{"in_progress"=>0, "accepted"=>1, "approved"=>2, "declined"=>3, "closed"=>4, "cancelled"=>5, "submitted"=>6}}

Чтобы проверить, является ли атрибут перечислением, вы можете использовать:

Application.defined_enums.has_key?('status')
#=> true

К сожалению, defined_enums не документирован.

Ответ 2

Я продолжал находить этот ответ, пытаясь выяснить, как это сделать, но метод @stefan давал мне uninitialized constant PostsHelper::Application

Нашел это тоже работает:

Post.type_for_attribute(attribute).is_a

Возможно, немного чище, так как вам не нужно беспокоиться о _prefix и _suffix?