如何测试ActiveRecord属性是否为枚举?

Mic*_*enn 13 activerecord ruby-on-rails ruby-on-rails-4

如何测试ActiveRecord属性是否为Enum?(根据Rails 4.1枚举声明)

它存储在数据库中,并使用columns_hash上的type方法将属性标识为整数.

模型中的枚举定义

enum status: [ :in_progress, :accepted, :approved, :declined, :closed, :cancelled, :submitted ]
Run Code Online (Sandbox Code Playgroud)

拉类型

irb(main):030:0> Application.columns_hash['status'].type
=> :integer
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 23

ActiveRecord::Enum添加一个defined_enumsclass属性 - 一个存储定义的枚举的哈希:

Application.defined_enums
#=> {"status"=>{"in_progress"=>0, "accepted"=>1, "approved"=>2, "declined"=>3, "closed"=>4, "cancelled"=>5, "submitted"=>6}}
Run Code Online (Sandbox Code Playgroud)

要测试属性是否为枚举,您可以使用:

Application.defined_enums.has_key?('status')
#=> true
Run Code Online (Sandbox Code Playgroud)

不幸的是,defined_enums没有记录.