我有這樣一個模型枚舉:如何獲得一個枚舉的字符串版本?
class User < AR::Base
enum status [:pending, :member, :banned]
end
現在我要輸出的「禁止」的字符串值,但它輸出的int值:
User.statuses[:banned]
我有這樣一個模型枚舉:如何獲得一個枚舉的字符串版本?
class User < AR::Base
enum status [:pending, :member, :banned]
end
現在我要輸出的「禁止」的字符串值,但它輸出的int值:
User.statuses[:banned]
我不知道這是他們如何工作。縱觀一些文檔:
http://api.rubyonrails.org/classes/ActiveRecord/Enum.html
你將不得不像
# User.status = 2
User.status = "banned"
這是一個非答案的東西,但問題掩蓋的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 } }