我有许多角色的用户,我想用数字或优先级号码标记这些角色。
,
Admin - 4
Client - 3
用户- 2
Guest - 1
而不是在我的角色表上添加一个新的列,它看起来像这样
<表类>id 名称 priority_num tbody><<tr>1 管理 4 2客户 3 3 用户 2 4客人 1 表类>
应该像这样简单:
class User
def priority_num
case name
when 'Admin'
4
when 'Client'
3
when 'User'
2
when 'Guest'
1
else
raise StandardError.new "#{name} does not have a priority_num configured"
end
end
end
然而,我可能会自己添加列,以防它扩展更多,并保持可查询性,而不必在外部报告工具中复制规则。
您可以使用enum来更容易地识别模型中的角色,而无需添加新的迁移。
enum priority_num: {guest: 1, user: 2, client: 3, admin: 4}
User.first.priority_num
将返回"admin"
你可以像这样比较检查用户是否为admin:
user.priority_num == "admin"
@aRtoo
enum priority_num: {guest: 1, user: 2, client: 3, admin: 4}
user = User.first
user.read_attribute_before_type_cast(:priority_num)
给出一个枚举状态的整数