Как проверить, является ли атрибут 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
?