2016-12-27 26 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 } }