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

时间:2014-07-29 21:04:46

标签: ruby-on-rails activerecord ruby-on-rails-4

如何测试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

2 个答案:

答案 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