2016-12-27 33 views

回答

0

这是一个非答案的东西,但问题掩盖的ActiveRecord::Enum实现:

# to get the string value for User.statuses[:banned]… 
"banned" 
# or 
:banned.to_s 

# to get the string value for all values in the User.statuses enum… 
User.statuses.keys 
# => ["pending", "member", "banned"] 

的关键并不是这里的重要部分,真的。所有Rails正在做的是符号,你给它这里的阵列...

enum status: [:pending, :member, :banned] 

...并将其分配给具有递增整数哈希同时为您提供一堆方便的方法来访问值:

user.status #=> 'pending' 
user.pending? #=> true 

如果您喜欢,您可以验证...

User.defined_enums.class #=> Hash 
User.defined_enums 
#=> { "status" => { "pending" => 0, "member" => 1, "banned" => 2 } }