如何测试ActiveRecord属性是否为Enum? (根据Rails 4.1枚举声明)
它存储在数据库中,并使用columns_hash上的type方法将属性标识为整数。
模型中的枚举定义
enum status: [ :in_progress, :accepted, :approved, :declined, :closed, :cancelled, :submitted ]
拉出类型
irb(main):030:0> Application.columns_hash['status'].type
=> :integer
答案 0 :(得分:22)
ActiveRecord::Enum
添加了defined_enums
类属性 - 存储已定义枚举的哈希:
Application.defined_enums
#=> {"status"=>{"in_progress"=>0, "accepted"=>1, "approved"=>2, "declined"=>3, "closed"=>4, "cancelled"=>5, "submitted"=>6}}
要测试属性是否为enum,您可以使用:
Application.defined_enums.has_key?('status')
#=> true
不幸的是,defined_enums
没有记录。
答案 1 :(得分:0)
在试图弄清楚该怎么做时,我一直在寻找这个答案,但是@stefan的方法却给了我uninitialized constant PostsHelper::Application
发现这也有效:
Post.type_for_attribute(attribute).is_a
可能更干净一点,因为您不必担心_prefix
和_suffix
?