我有这样一个模型枚举:如何获得一个枚举的字符串版本?
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 } }